线程异常...为什么它一直忽略pass关键字?

时间:2014-12-01 20:39:48

标签: python exception exception-handling

我遇到了与线程相关的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!",但线程停止不再返回警报。

我在这里做错了什么?

1 个答案:

答案 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块包含在大部分代码中会降低可读性并浪费空间(许多行不必要地缩进)。