除了裸露的except:
子句(就像其他人说的那样,您不应使用)之外,您可以简单地捕获Exception
:
import traceback
import logging
try:
whatever()
except Exception as e:
logging.error(traceback.format_exc())
# Logs the error appropriately.
通常,仅当您想在终止之前处理任何其他未捕获的异常时,才考虑在代码的最外层执行此操作。
的优势except Exception
过度裸露except
是,有少数例外,它不会赶上,最明显的KeyboardInterrupt
和SystemExit
:如果你抓住了,吞下这些,那么你可以让任何人都很难离开你的脚本。
您可以,但您可能不应该:
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