我需要帮助弄清楚为什么我会收到以下错误:
Traceback (most recent call last):
File "prawtest3.py", line 25, in <module>
commentMatcher()
File "prawtest3.py", line 13, in commentMatcher
commentCollection.append(comment)
UnboundLocalError: local variable 'commentCollection' referenced before assignment
这是我的代码。有关背景信息,我正在尝试创建一个reddit bot,用于比较人员评论,然后在他们监控的人提交新评论时pms用户。如果您发现功能有问题,请随时分享您的输入。我只需要首先诊断我的代码以摆脱语法错误,然后再担心语义错误。
import praw
import time
r = praw.Reddit('PRAW related-question monitor by u/testpurposes v 1.0.')
r.login()
user = r.get_redditor('krumpqueen')
commentCollection = []
commentComparison = []
def commentMatcher():
comments = user.get_comments(limit = 4)
for comment in comments:
commentCollection.append(comment)
time.sleep(60)
comments = user.get_comments(limit = 4)
for comment in comments:
commentComparision.append(comment)
if commentCollection[1] != commentComparision[1]:
r.send_message('krumpqueen', 'just made a new comment', 'go check now')
commentCollection = list(commentComparision)
else:
r.send_message('krumpqueen', 'did not made a new comment', 'sorry')
while(True):
commentMatcher()
答案 0 :(得分:1)
你使用commentCollection
使得python(错误地 1 )假设commentCollection
是本地的(因为你稍后有一个赋值给global
声明)。当你尝试追加到本地(尚未创建)时,python会抛出UnboundLocalError。
1 当然,这不是python做出错误的假设,这就是语言的设计方式。
答案 1 :(得分:1)
您在commentCollection = list(commentComparision)
内commentMatcher
。因为您已经完成了这项工作,所以Python得出结论,您有一个本地名称commentCollection
。
您的代码因代码
的原因而失败def foo():
bar.append(3)
bar = []
会失败。
要获得commentCollection = list(commentComparision)
a)重新绑定全局名称commentCollection
,并且b)不要让它看起来像是本地名称,添加global commentCollection
作为第一行commentMatcher
的定义。
在严格的代码中,您不希望将状态管理为像这样的全局变量,而是要创建一个对象。