如何编写捕获所有Python异常的try / except块?

这是一条通用的经验法则,尽管您可以使用以下代码捕获所有异常,但您不应:

try:
    #do_something()
except:
    print "异常捕获!"

但是,这也将捕获我们可能不感兴趣的异常,例如KeyboardInterrupt。除非您立即重新引发异常-我们将无法捕获异常:

try:
    f = open('file.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 "无法将数据转换为整数。"
except:
    print "意外错误:", sys.exc_info()[0]
    raise

如果file.txt在与脚本相同的文件夹中不可用,我们将获得以下输出。

I/O error(2): No such file or directory