协慌网

登录 贡献 社区

关于捕获任何异常

如何编写捕获所有异常try / except

答案

除了裸露的except:子句(就像其他人说的那样,您不应使用)之外,您可以简单地捕获Exception

import traceback
import logging

try:
    whatever()
except Exception as e:
    logging.error(traceback.format_exc())
    # Logs the error appropriately.

通常,仅当您想在终止之前处理任何其他未捕获的异常时,才考虑在代码的最外层执行此操作。

的优势except Exception过度裸露except是,有少数例外,它不会赶上,最明显的KeyboardInterruptSystemExit :如果你抓住了,吞下这些,那么你可以让任何人都很难离开你的脚本。

您可以,但您可能不应该:

try:
    do_something()
except:
    print "Caught it!"

但是,这也会捕获KeyboardInterrupt异常,您通常不希望这样做,对吗?除非您立即重新引发异常 - 参见docs 中的以下示例:

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
    print "Could not convert data to an integer."
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise

您可以执行此操作以处理一般异常

try:
    a = 2/0
except Exception as e:
    print e.__doc__
    print e.message