◎知识点
使用try-except语句捕获和处理异常
◎脚本练习
"""
程序在运行期间产生异常时,为了让程序能够继续运行,可以对抛出的异常实例对象进行捕获和处理,
这是通过try-except语句实现的:
把可能会产生异常的代码放在try语句块中以捕获异常实例对象,
把处理异常的代码放在由若干个except子句组成的except语句块中。
try-except语句的语法格式为:
try:
可能会产生异常的代码
except 异常类对象1:
当前except子句处理异常的代码
except 异常类对象2:
当前except子句处理异常的代码
...
except 异常类对象n:
当前except子句处理异常的代码
"""
try:
result = 1 / 2
# result = 1 / 0
# result = int('abc')
print(result)
except ImportError:
print("导入错误")
except ZeroDivisionError:
print("0不能作为除数")
except TypeError:
print("类型错误")
print("结束")
"""
如果抛出的异常实例对象所对应的类对象是except子句中异常类对象的子类,那么该except子句也会被匹配
"""
try:
result = 1 / 0
print(result)
except ArithmeticError:
print("数学错误")
"""
当try语句块中产生异常时,会从上到下依次查找是否有匹配的except子句,只要找到一个匹配的
except子句,则不会再查找剩余的except子句。因此,要注意各个except子句的顺序
"""
try:
result = 1 / 0
print(result)
except ZeroDivisionError:
print("0不能作为除数")
except ArithmeticError:
print("数学错误")
print("结束")
try:
result = 1 / 0
print(result)
except ArithmeticError:
print("数学错误")
except ZeroDivisionError:
print("0不能作为除数")
print("结束")
"""
当多个异常类对象对应的异常处理代码完全相同时,可以把这些异常类对象以元组的形式放在一个except子句中
"""
try:
result = 1 / 0
print(result)
except TypeError:
print("运行出错了")
except ZeroDivisionError:
print("运行出错了")
except ValueError:
print("运行出错了")
try:
result = 1 / 0
print(result)
except (TypeError, ZeroDivisionError, ValueError):
print("运行出错了")
"""
如果想在匹配到的except子句中访问异常实例对象,可以在except子句中的冒号添加关键字as和一个变量
"""
try:
result = 1 / 0
print(result)
except ZeroDivisionError as err:
print(type(err)) # <class 'ZeroDivisionError'>
# 类对象ZeroDivisionError实现了特殊方法__str__()
print(err) # division by zero
try:
result = int('abc')
print(result)
except (TypeError, ZeroDivisionError, ValueError) as err:
print(type(err)) # <class 'ValueError'>
# 类对象ValueError实现了特殊方法__str__()
print(err) # invalid literal for int() with base 10: 'abc'
"""
为了在except语句块中将所有的异常对象尽可能地覆盖到,可以将最后一个except子句中的
异常类对象指定为Exception(内置的异常类对象和自定义的异常类对象都继承自Exception),
或者在最后一个except子句中不指定异常类对象
"""
try:
result = 1 / 0
print(result)
except (TypeError, ValueError):
print("类型错误或值错误")
# except:
except Exception:
print("其它错误")◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/try_except.py
