2011-06-01 128 views
0

我有这样的代码:为什么我得到这个线程错误?

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> 

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

+2

你可以添加一个try/catch块打印出细节上的未处理的异常?不相关,但我建议将'a'的定义移到'''函数定义 - 它不在线程之间共享,所以最好保存在使用它的一个线程本地。 – sarnold 2011-06-01 02:54:06

回答

2

我跑你的代码的简化版本,看到一个堆栈跟踪除了未处理的异常信息。它应该可以帮助你找到问题。

你应该考虑一些改进。首先,有一个高级图书馆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

您正在分配给函数中的“a”,所以它默认为函数的局部。

的例外可能是:

UnboundLocalError: local variable 'a' referenced before assignment 
0

加入工人()函数global a如果只是为了消除错误