我遇到了与线程相关的Python问题。
import threading
import time
import random
import sys
import echo
class presence(threading.Thread):
def __init__(self, cb):
threading.Thread.__init__(self)
self.callback = cb
def run(self):
minValue = 0
maxValue = 3
try:
while True:
time.sleep(1)
if random.randint(minValue, maxValue) == 1:
self.callback(1)
elif random.randint(minValue, maxValue) == 2:
raise Exception('An error')
else:
self.callback(0)
except:
print 'Exception caught!'
pass
def showAlert():
echo.echo('Someone is behind the door!')
def count(x):
if x == 1:
showAlert()
sys.stdout.flush()
这就是我所说的:
t2 = presence.presence(presence.count)
t2.start()
我最终获得"Exception caught!"
,但线程停止不再返回警报。
我在这里做错了什么?
答案 0 :(得分:2)
try/except
块应位于循环内。例如:
while True:
...
elif random.randint(minValue, maxValue) == 2:
try:
raise Exception('An error')
except Exception:
print 'Exception caught!'
否则,当引发异常并且Python跳转到except:
块以便处理它时,将退出循环。
您也会注意到我在我的示例中有选择地放置try/except
块仅覆盖可能实际引发异常的代码。这是最佳做法,我建议您使用它。将try/except
块包含在大部分代码中会降低可读性并浪费空间(许多行不必要地缩进)。