未绑定的本地错误python

时间:2014-02-04 03:01:50

标签: python api syntax-error reddit praw

我需要帮助弄清楚为什么我会收到以下错误:

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()

2 个答案:

答案 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的定义。

在严格的代码中,您不希望将状态管理为像这样的全局变量,而是要创建一个对象。