2017-09-04 211 views
0

我是Python开发新手,并试图找出如何捕获线程内的ConnectionError,然后退出。目前我拥有它,因此它可以捕获一般异常,但我想为不同的异常指定不同的异常处理,并且还会停止某些类型的异常的应用程序。Python线程捕捉异常并退出

我目前正在使用线程,但我开始怀疑我是否应该使用多线程呢?

下面是代码的副本:

import threading 
import sys 
from integration import rabbitMq 
from integration import bigchain 


def do_something_with_exception(): 
    exc_type, exc_value = sys.exc_info()[:2] 
    print('Handling %s exception with message "%s" in %s' % \ 
      (exc_type.__name__, exc_value, threading.current_thread().name)) 


class ConsumerThread(threading.Thread): 
    def __init__(self, queue, *args, **kwargs): 
     super(ConsumerThread, self).__init__(*args, **kwargs) 

     self._queue = queue 

    def run(self): 
     bigchaindb = bigchain.BigChain() 
     bdb = bigchaindb.connect('localhost', 3277) 
     keys = bigchaindb.loadkeys() 

     rabbit = rabbitMq.RabbitMq(self._queue, bdb, keys) 
     channel = rabbit.connect() 

     while True: 
      try: 
       rabbit.consume(channel) 
       # raise RuntimeError('This is the error message') 
      except: 
       do_something_with_exception() 
       break 

if __name__ == "__main__": 
    threads = [ConsumerThread("sms"), ConsumerThread("contract")] 
    for thread in threads: 
     thread.daemon = True 
     thread.start() 
    for thread in threads: 
     thread.join() 

    exit(1) 

回答

2

Python有Built-in Exceptions。阅读每个异常描述以了解您想要引发哪种特定类型的异常。

例如:

raise ValueError('A very specific thing you don't want happened') 

使用这样的:

try: 
    #some code that may raise ValueError 
except ValueError as err: 
    print(err.args) 

这里是Python的异常层次的列表:

BaseException 
... Exception 
...... StandardError 
......... TypeError 
......... ImportError 
............ ZipImportError 
......... EnvironmentError 
............ IOError 
............... ItimerError 
............ OSError 
......... EOFError 
......... RuntimeError 
............ NotImplementedError 
......... NameError 
............ UnboundLocalError 
......... AttributeError 
......... SyntaxError 
............ IndentationError 
............... TabError 
......... LookupError 
............ IndexError 
............ KeyError 
............ CodecRegistryError 
......... ValueError 
............ UnicodeError 
............... UnicodeEncodeError 
............... UnicodeDecodeError 
............... UnicodeTranslateError 
......... AssertionError 
......... ArithmeticError 
............ FloatingPointError 
............ OverflowError 
............ ZeroDivisionError 
......... SystemError 
............ CodecRegistryError 
......... ReferenceError 
......... MemoryError 
......... BufferError 
...... StopIteration 
...... Warning 
......... UserWarning 
......... DeprecationWarning 
......... PendingDeprecationWarning 
......... SyntaxWarning 
......... RuntimeWarning 
......... FutureWarning 
......... ImportWarning 
......... UnicodeWarning 
......... BytesWarning 
...... _OptionError 
... GeneratorExit 
... SystemExit 
... KeyboardInterrupt 

注:SystemExit是一种特殊类型的例外。当提出的Python解释器退出时;没有堆栈回溯被打印。如果你没有指定异常的状态,它将返回0.

+0

谢谢,这清除了如何定义异常! –