全捕捉

#前面了解了很多异常,是否所有异常都可以捕捉的呢?其实并非如此。如下示例:
 1 #!/usr/bin/python3
 2 #-*-coding:UTF-8-*-
 3 #异常9.7
 4 
 5 def model_exception(x,y):
 6     try:
 7         a=x/y
 8         b=name
 9     except(ZeroDivisionError,NameError,TypeError)as e:
10         print(e)
11 model_exception(2,'')
#在该示例中,调用函数时有一个实参传入的是空值,程序执行结果如下:
1 D:Pythonworkspacedatatime20171219>python 异常9.7.py
2 unsupported operand type(s) for /: 'int' and 'str'
#由结果看到,这里抛出的信息并不像我们之前看到的那样,带有明显的Error关键词或异常词。此处只是告知不支持的操作类型。
#在实际编码过程中,即使程序能处理好几种类型的异常,但有一些异常还是会从我们手掌中溜走。上面示例中的异常就是逃过了try/except语句的检查,对于这种情况我们根本无法预测会发生什么,也无法提前做任何准备。在这种情况下,与其使用不是捕捉异常的try/except语句隐藏异常,不如让程序立即崩溃。
#如果要处理这种异常,该如何操作。示例如下:
 1 #!/usr/bin/python3
 2 #-*-coding:UTF-8-*-
 3 #异常9.7
 4 
 5 def model_exception(x,y):
 6     try:
 7         a=x/y
 8         b=name
 9     except:
10         print('Error happend')
11 
12 model_exception(2,'')
#程序执行结果如下:
1 D:Pythonworkspacedatatime20171219>python 异常9.7.py
2 Error happend
#由程序和执行结果看到,可以在except子句种忽略所有异常类,从而让程序输出自己定义的异常信息。
#当然,这里只是给出了一种可参考的解决方式。从实用性方面讲,不建议这么做,因为这样捕捉异常非常危险,会隐藏所有没有预先想到的错误。建议使用抛出异常的方式处理,或对异常对象e进行一些检查。
原文地址:https://www.cnblogs.com/DLHe/p/8175636.html