【问题标题】:why did this error occur when argument is under the scope of the function f()?为什么当参数在函数 f() 范围内时会发生此错误?
【发布时间】:2020-04-21 01:15:09
【问题描述】:
def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg
f(5)

错误:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    f(5)
  File "test.py", line 5, in f
    return arg
UnboundLocalError: local variable 'arg' referenced before assignment

如果你像这样改变函数 f()

def f(a, *arguments):
    for arg in range(1,4):
        print(arg)
    return arg
f(5)

输出是这样的:

1
2
3

现在 arg 在函数中是全局的。为什么会这样?

【问题讨论】:

    标签: python function oop


    【解决方案1】:
    def f(a, *arguments):
        for arg in arguments:
            print(arg)
        return arg
    
    
    f(5)
    

    由于 *arguments 为空,因此您永远不会进入循环。因此,当您到达return(arg) 时,该变量仍未定义。尝试使用f(5, [1, 2, 3]) 调用它,您会看到更符合您期望的内容。

    【讨论】:

      【解决方案2】:

      @Prune 的回答很适合您的问题。即使arguments 为空,您可能仍想返回某些内容。您可以通过添加参数长度检查来做到这一点。

      def f(a, *arguments):
          if len(arguments):
              for arg in arguments:
                  print(arg)
              return arg # will return last element in arguments always
          return -1 # will return default value here
      
      f(5)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        • 2015-09-29
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多