Почему я получаю эту ошибку потока? - PullRequest
0 голосов
/ 01 июня 2011

У меня есть этот код:

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 ]

2 голосов
/ 01 июня 2011

Я запустил более простую версию вашего кода и вижу трассировку стека помимо сообщения 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 голос
/ 01 июня 2011

Вы назначаете "a" в функции, поэтому по умолчанию она является локальной для функции.

Исключением может быть:

UnboundLocalError: local variable 'a' referenced before assignment
0 голосов
/ 01 июня 2011

добавить global a в функцию worker (), если просто устранить ошибку

...