无法弄清楚Python中的UnboundLocalError

时间:2014-06-02 01:28:31

标签: python

嵌入在函数中的代码块:

try:
    os.makedirs(os.path.dirname(log))
except OSError:
    pass

错误:

UnboundLocalError: local variable 'OSError' referenced before assignment

这可能是什么症状?

2 个答案:

答案 0 :(得分:4)

Python 2异常捕获语法中存在令人遗憾的混淆源。在函数的某个地方,您执行了以下操作:

except SomeError, OSError:

看起来它正在捕捉两种异常类型,但事实并非如此。 OSError实际上被解释为您想要保存您正在捕捉的SomeError个实例的变量的名称。这意味着当您尝试捕获OSError时:

except OSError:

OSError指的是您没有意识到自己创建的局部变量。

要捕获多个异常类型,您需要将要捕获的类型列表括起来:

except (SomeError, OSError):

答案 1 :(得分:2)

您的代码在函数中的某处分配给OSError,这意味着编译器已将其标记为局部变量。验证该名称显示的每一位代码,以确认您没有错误地使用它。