如何处理UnboundLocalError?

时间:2013-04-30 12:32:57

标签: python django

所以在我的代码中,

if ...:
    if form.is_valid():
                order_created = create_order(request,item)
                order_number = order_created.id
                if order_number:
                    ....

context = {'total':order_created.total}

当我运行这个时,我得到unboundlocal error,local variable 'order_created' referenced before assignment。我环顾四周并且learnt我实际上无法访问该块中的块内的变量。我还了解到我不应该使用global statement。 我怎样才能访问order_created,我本可以从if块中声明它但不验证订单。

2 个答案:

答案 0 :(得分:2)

虽然你没有粘贴整个视图,但我很确定错误来了 因为您没有考虑表格何时有效。

因此,当您在context词典上使用它时,order_created永远不会 已定义。

所以你应该这样做:

if form.is_valid():
    order_created = ....
else:
    order_created = None

context = {'total': order_created.total if order_created else None}

修改 请记住,这不是在django中处理表单的正确方法。 我希望您已阅读this。当表单有效且您成功时 创建订单时,将用户重定向到其他视图。

答案 1 :(得分:2)

Python范围可能比其他结构化语言稍微不那么面向块,只要代码路径实际经过该块,就可以在块外部访问该变量。例如,这将导致错误:

b = False
if b:
    x = 5
print x

但是这不会,即使在块外面访问x:

b = True
if b:
    x = 5
print x

诀窍是在输入块之前将变量设置为某个值:

order_created = None
if ...:
    if form.is_valid():
        order_created = create_order(request,item)
        order_number = order_created.id
        if order_number:
                ....
if order_created is not None:
    context = {'total':order_created.total}
else:
    context = ...