我如何编写一个try/ except块来捕获所有异常?
try/ except
你可以,但你可能不应该:
try: do_something() except: print "Caught it!"
但是,这也会捕获类似的异常,KeyboardInterrupt而你通常不希望那样,对吗?除非你立即重新引发异常,否则请参阅docs中的以下示例:
KeyboardInterrupt
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
除了一个裸露的except:子句(就像其他人说的那样,你不应该使用),你可以简单地捕获Exception:
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:如果你抓住了,吞下这些,那么你可以让任何人都很难离开你的脚本。
except Exception
SystemExit