对于在Python中if语句之前运行的循环?

时间:2018-04-19 19:53:04

标签: python

我道歉,如果这有点基础,但我主要是一个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,正确地指出了这个问题。

3 个答案:

答案 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 = []