我道歉,如果这有点基础,但我主要是一个JavaScript开发人员,所以我不熟悉Python解释代码的方式。看起来我在以下代码中遇到了某种异步/提升错误:
if resultsLength == 10:
listLength = df.head(10).iterrows()
elif resultsLength == 15:
listLength = df.head(15).iterrows()
elif resultsLength == 20:
listLength = df.head(20).iterrows()
elif resultsLength == 25:
listLength = df.head(25).iterrows()
for index, row in listLength:
.../do stuff
我得到的错误是:
UnboundLocalError: local variable 'listLength' referenced before assignment
如何在Python中处理这样的异步问题?我应该将for循环定义为函数并将其用作回调吗?
溶液
Alex Hall是正确的,我的if测试失败了,因为我忘记将resultsLength转换为int,就像这样
if int(resultsLength) == 10:
为了记录,如果大多数人都在回答错误的答案,我真的不应该因为提出“愚蠢”的问题而受到抨击。谢谢,Alex,正确地指出了这个问题。
答案 0 :(得分:2)
您需要确保listLength
变量具有值。在下面的示例中,我使用空列表[]
初始化它,这样当没有条件匹配时,它仍然是定义的。
listLength = []
if resultsLength == 10:
listLength = df.head(10).iterrows()
elif resultsLength == 15:
listLength = df.head(15).iterrows()
elif resultsLength == 20:
listLength = df.head(20).iterrows()
elif resultsLength == 25:
listLength = df.head(25).iterrows()
答案 1 :(得分:1)
Python没有异步运行代码,resultsLength == 10
等所有条件都是错误的,因为resultsLength
是其他内容。
在这种情况下,不需要你的if语句,你应该写:
for index, row in df.head(listLength).iterrows():
在更一般的情况下,if语句包含更复杂的内容而你真的只想允许一些值,我建议在你的elif链的末尾添加这样的东西:
else:
raise ValueError('Unhandled case listLength = %r' % listLength)
这会立即提醒您该问题,并让您知道listLength
是什么。
答案 2 :(得分:0)
你运行了那个块但是resultsLength既不是10,也不是15,也不是20,也不是25,因此没有if / elif块被执行而且listLength从未被设置过。
您收到错误https://docs.python.org/3/library/exceptions.html#UnboundLocalError
要解决您的问题,您可以确保在第一个if之前将resultsLength设置为空列表,或者您可以使用else将其设置为空列表,如下所示:
resultsLength = []
if ...
或
if ...
elif ...
else:
resultsLength = []