Python 为什么会出现这个线程错误?
我有以下代码:Python 为什么会出现这个线程错误?,python,urllib2,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 s
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>
由启动的线程中未处理的异常
有人知道我为什么会出现此错误吗?您在函数中分配给“a”,因此它默认为函数的本地属性
例外情况可能是:
UnboundLocalError: local variable 'a' referenced before assignment
您将在函数中指定给“a”,因此它默认为函数的本地
例外情况可能是:
UnboundLocalError: local variable 'a' referenced before assignment
我运行了一个更简单的代码版本,除了未处理的异常消息之外,还看到了堆栈跟踪。它应该可以帮助您找到问题所在 有一些改进你应该考虑。首先,有一个高级库
threading
,建议优先于thread
。其次,您正在使用执行繁忙的等待,而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'
我运行了一个更简单的代码版本,除了未处理的异常消息之外,还看到了堆栈跟踪。它应该可以帮助您找到问题所在 有一些改进你应该考虑。首先,有一个高级库
threading
,建议优先于thread
。其次,您正在使用执行繁忙的等待,而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'
如果只是为了消除错误,请在worker()函数中添加
全局a
如果只是为了消除错误,请在worker()函数中添加全局a
是否可以添加try/catch块来打印未处理异常的详细信息?不相关,但我建议将a
的定义移到workers
函数定义中——它不在线程之间共享,因此最好保持在使用它的一个线程的本地。是否可以添加try/catch块来打印未处理异常的详细信息?不相关,但我建议将a
的定义移到workers
函数定义中——它不是在线程之间共享的,因此最好保持在使用它的一个线程的本地。