例如:

$ 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/

10-16 03:29