例如:
$ cat -n foo.py
1 def f():
2 str = len
3 str = str('abc')
4 # len = len('abc')
5 f()
$ python2.7 foo.py
$
它运行成功,因此第2行和第3行没有问题。但是在取消注释第4行之后:
$ cat -n bar.py
1 def f():
2 str = len
3 str = str('abc')
4 len = len('abc')
5 f()
$ python2.7 bar.py
Traceback (most recent call last):
File "bar.py", line 5, in <module>
f()
File "bar.py", line 2, in f
str = len
UnboundLocalError: local variable 'len' referenced before assignment
$
现在它报告错误,因此未注释的第4行肯定有问题,但是为什么在第2行报告了回溯错误?
最佳答案
编程常见问题解答中有一个答案
这是因为当您对范围中的变量进行赋值时,
该变量成为该范围的局部变量,并以相似的方式阴影
外部作用域中的命名变量。
阅读完整的信息:Why am I getting an UnboundLocalError when the variable has a value?
注释len时,它被视为内置函数len()
def f():
str = len
print type(str)
str = str('abc')
# len = len('abc')
print type(len)
f()
<type 'builtin_function_or_method'>
<type 'builtin_function_or_method'>
关于python - 错误行号报告“UnboundLocalError”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45321689/