【问题标题】:Receiving : "UnboundLocalError: local variable referenced before assignment"接收:“UnboundLocalError:分配前引用的局部变量”
【发布时间】:2012-06-21 21:53:41
【问题描述】:

我已经看到多个线程遇到相同问题的人,但由于问题的独特性,似乎已根据具体情况提供了解决方案

这是我的代码:

loga = [(912, "Message A1") , (1000, "Message A2") , (988, "Message A3") , (1012, "Message A4") , (1002, "Message A5")]
logb = [(926, "Message B1") , (1008, "Message B2") , (996, "Message B3") , (1019, "Message B4") , (1100, "Message B5")]
logc = [(1056,"Message C1") , (1033, "Message C2") , (999, "Message C3") , (1054, "Message C4") , (1086, "Message C5")]
logs = [loga, logb, logc]
out = []


def find_lowest_i(lst):
    for i in range(len(lst)):
        log = lst[i]
        if log:
            t = log[0][0]
            if i==0 or t < lowest_t:
                lowest_i = i
                lowest_t = t
    return lowest_i

while True:
    i = find_lowest_i(logs)
    print "i=", i
    tpl = logs[i].pop(0)
    print tpl
    out.append(tpl)
    print out

我的确切错误:

"消息文件名行位置追溯19 find_lowest_i 13
UnboundLocalError: 赋值前引用了局部变量 'lowest_t'"

【问题讨论】:

  • 不太清楚你遇到了什么麻烦...

标签: python python-2.7 variable-assignment


【解决方案1】:

由于不断poping,其中一个日志(有这个数据,第一个日志)最终会是空的:

logs = [[],
       [(1019, 'Message B4'), (1100, 'Message B5')],
       [(1056, 'Message C1'), (1033, 'Message C2'), (999, 'Message C3'),
        (1054, 'Message C4'), (1086, 'Message C5')]]

在这种情况下,if log 将因 i=0 而失败,并且lowest_t 未初始化。 在下一次迭代中,i=1,有一个log,但没有lowest_t。例外!

【讨论】:

  • 啊,我明白了!这是有道理的。很明显,我对 python 不是很先进。我会使用例外吗?
猜你喜欢
  • 2017-08-10
  • 2020-01-16
  • 2019-12-05
  • 2017-09-19
  • 2020-09-26
  • 2022-01-02
  • 2019-03-22
  • 2019-01-24
  • 2021-07-01
相关资源
最近更新 更多