【问题标题】:can this variable really be "referenced before assignment"这个变量真的可以“在赋值前引用”吗
【发布时间】:2012-11-03 12:36:29
【问题描述】:

我在下面有一段代码(属于 Django 管理视图,稍作修改)。我的 IDE (PyCharm) 在最后一行警告我 Local variable 'ModelForm' might be referenced before assignment

我不知道这怎么会发生,但是当我注释掉第 6 行时:

with transaction.commit_manually():

然后警告消失。

是我遗漏了什么,还是 PyCharm 遗漏了什么?

这是代码块。我把它分成几行,它仍然给出警告。原始代码块在这里(70 行):http://pastebin.com/4UT9hRPb

    ModelForm = self.get_form(request, obj, form=form)

    formsets = []
    if request.method == 'POST':
        # commit only when all forms are valid
        with transaction.commit_manually():
            try:
                objects = queryset.all()
                transaction.commit()
                return self.response_change(request, new_object)

            finally:
                general_error = unicode(sys.exc_info()[1])
                transaction.rollback()

    form = ModelForm()

【问题讨论】:

  • transaction 就是这样被导入的?
  • PyCharm 在哪里抱怨?在代码的末尾还是在您执行form = ModelForm(...) 时?无论如何,我认为这是 PyCharm 中的一个错误。
  • @Lattyware 事务使用from django.db import transaction 导入。当然,原来还有更多的代码可以证明交易的使用是合理的......
  • @Bakuriu 在form = ModelForm() 那里
  • 我自己无法在 Pycharm 中重现这种行为。可以给个文件测试一下吗?

标签: python django transactions django-admin


【解决方案1】:

似乎这个警告不应该发生,至少我不明白为什么,也许 PyCharm 在确定 with 块的范围时有问题。但是您可以通过移动 with 块中的 ModelForm 分配来消除此警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2011-11-06
    相关资源
    最近更新 更多