一尘不染

Python-关于捕获任何异常

python

我如何编写一个try/ except块来捕获所有异常?


阅读 305

收藏
2020-02-21

共2个答案

一尘不染

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

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
2020-02-21
一尘不染

除了一个裸露的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:如果你抓住了,吞下这些,那么你可以让任何人都很难离开你的脚本。

2020-02-21