【问题标题】:'NoneType' object has no attribute '__getitem__' when I try to return a dict当我尝试返回字典时,'NoneType' 对象没有属性'__getitem__'
【发布时间】:2015-07-30 19:47:37
【问题描述】:

Traceback 切换到复制粘贴视图

C:\Python27\lib\site-packages\django-1.7.3-   py2.7.egg\django\core\handlers\base.py in get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) ...

 ▶ Local vars

 c:\mystudio\tag_study\views.py in recite_words
        VariablesNew = next_word(request) ...

▶ Local vars

c:\mystudio\tag_study\views.py in next_word
                p_t_set.type7_status = change["type_status"] ...

▶ Local vars

return (control)

我想我在 chossen_old_words 函数中构建了一个字典并返回它,但是当我尝试使用该字典时,它显示以下错误:

“NoneType”对象没有属性“getitem

我不知道是什么导致了这个错误。有没有我遗漏的一些基础知识?

【问题讨论】:

  • 据我所知,您的函数不会返回任何内容。代码应该做什么?视图应该返回某种类型的 HttpResponse。
  • 您在函数chossen_old_words 中定义您的change 字典。不能在next_word 函数中使用它。有关范围,请参阅this question。此外,请考虑使用 pep8 进行代码样式设置。
  • 我觉得return(control)这行应该是上面代码的最后一行。对我来说,看起来你没有从你的 chossen_old_words 函数返回任何东西——离开函数没有返回。您能否更正您的代码,以便我们可以查看返回(控制)的标识级别)
  • 我的代码中存在“返回控制”。我只是忘了在问题中加上“退货控制权”。

标签: python django


【解决方案1】:

我在chossen_old_words() 函数中没有看到任何return 语句,因此当您在函数中构建字典时(我想它是control 之一),您不会返回它。

当您接受next_word() 函数中的返回值时,正如我所说的chossen_old_words() 函数返回nothing。但是,在 Python 中,每个函数都会返回 something ,如果您没有明确返回任何内容(如您的情况),则返回 None。这正是发生在你身上的事情。

None 的类型是NoneType,它没有任何方法。您尝试将其用作字典,但一旦您尝试从中检索项目,就会收到此错误。

我相信可以通过在chossen_old_words() 函数末尾添加return control 语句来修复此错误。很难说是否还有其他错误。

顺便说一句,您的缩进似乎已关闭。

【讨论】:

  • 这是一个类型错误,我现在将返回(控件)添加到代码中。
  • 我的回答对你有帮助吗?它现在是否按预期工作?顺便说一句,你不需要使用括号 - return control 就可以了。
  • 不,它没有帮助,“返回控制”存在于我的代码中。我只是忘了在问题中加上“退货控制权”。
  • 去掉括号。另外,请注意如果此条件为 False 会发生什么:PersonalRecord.objects.filter(status = type).exists()。你看到了吗?
  • 感谢您的耐心,但还是不行。我决定重写函数。
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 2012-12-04
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 2018-04-13
相关资源
最近更新 更多