【问题标题】:variable 'cmd_part_1' referenced before assignment赋值前引用的变量 'cmd_part_1'
【发布时间】:2013-03-09 01:27:07
【问题描述】:

我的机器人程序不断出现此错误:

start.py:890 分配前引用的局部变量 'cmd_part_1'

代码:

try:
    my_alias = message.body.split(" ", 3)
    if len(my_alias) > 2:
        cmd_part_1 = my_alias[0]
        cmd_part_2 = my_alias[1]
    elif len(my_alias) < 2:
        cmd_part_1 = ""
        cmd_part_2 = ""
except Exception as e:
    cmd_part_1 = ""
    cmd_part_2 = ""

if self.getAccess(user.name.lower()) >= lvl_config.rank_req_callme and cmd_part_1 == "call" and cmd_part_2 == "me":
    whole_body = message.body
    whole_body = whole_body.replace("call me ", "");
    whole_body = whole_body.replace(",", "&#44;");
    chat_message("<font color='#%s' face='%s' size='%s'>%s <b>%s</b></font>" % (font_color, font_face, font_size, random.choice(["Recorded! ^_^ I will now call you", "Registah'd, you are now", "Yo, dis mah big homie, I call dem", "Ye-a-a-ah, I guess I can call you that...", "If I have to.. I suppose I'll call you..", "I decided I will call you"]), whole_body), True)
    alias_flag = 0
    finished_proc = 1
    file = open("storage/flatfile/various/aliases.csv", "r")
    for line in file.readlines():
        alias_data = line.strip()
        alias_username, alias_nickname = alias_data.split(",", 1)

错误行:

if self.getAccess(user.name.lower()) >= lvl_config.rank_req_callme and cmd_part_1 == "call" and cmd_part_2 == "me":

我做错了什么?

【问题讨论】:

  • try 和 except 块的缩进似乎关闭了,从这个 sn-p 看其余的缩进是否正确尚不清楚。
  • 我认为您在使用 Guido van Rossum 的语言时不必为自己是荷兰人而道歉。

标签: python python-2.7 python-3.x


【解决方案1】:

在设置cmd_part_1 的第一个try 块中有ifelif 语句。

如果这些if 语句中的条件都不是True,会发生什么情况?

在这种情况下,cmd_part_1 永远不会被赋值。这就是您的代码中发生的事情。解决这个问题,它会工作。也许在那里添加一个else 子句并为cmd_part_1cmd_part_2 分配一个默认值。或者让其中一个拥有=

例如:

if len(my_alias) >= 2:

代替:

if len(my_alias) > 2:

之后,正如 eryksun 在下面的评论中所建议的,您可以将 elif 替换为 else

【讨论】:

  • 可能应该是if len(my_alias) &gt;= 2,因为分配需要下标0和1。那么如果该测试是False,则默认为else套件,而不是elif测试。跨度>
  • @eryksun 你是对的。我根据您的建议更新了答案。
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2011-11-06
  • 2018-01-12
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多