为什么我会收到此线程错误?

时间:2011-06-01 02:49:58

标签: python urllib2

我有这段代码:

import urllib2
import thread

a = 0
def workers():

    while 1:

        a+=1
        silva = urllib2.urlopen('http://en.dilandau.eu/download_music/said-the-whale-'+str(a)+'.html')
        si = silva.read()
        if 'var playlist' not in si:
            print a
            break

thread.start_new_thread(workers,())


while 1:
    print '---'

但是我收到了错误:

Unhandled exception in thread started by <function workers at 0x0000000002B1FDD8>

有谁知道我为什么会收到这个错误?

3 个答案:

答案 0 :(得分:2)

我运行了一个更简单的代码版本,除了Unhandled Exception消息之外还看到了堆栈跟踪。它应该可以帮助您找到问题。

您应该考虑一些改进。首先,建议使用threading以上的高级库thread。其次,你正在忙着等待while 1循环!使用join()更为可取。通常它也有助于在您的工作代码周围放置一个异常处理程序。例如,

import threading
import time
import traceback

def worker():
    try:
        for i in range(5):
            print i
            time.sleep(0.5)
        assert 0, 'bad'
    except:
        traceback.print_exc()

t = threading.Thread(target=worker)

t.start()
t.join()

print 'completed'

答案 1 :(得分:1)

你在函数中指定为“a”,因此它默认为函数的本地。

例外可能是:

UnboundLocalError: local variable 'a' referenced before assignment

答案 2 :(得分:0)

如果只是为了消除错误

,在worker()函数中添加global a