软件程序在运行过程中,非常可能出现异常,比如:程序在运行中,突然内存或硬盘满了;为了增加程序的健壮性,在遇到意外情况(出现异常)时让程序做出合理的处理,在编写程序时需要考虑如何处理异常情况。
异常机制本质:当程序出现异常,程序安全的退出,处理完后继续执行的机制。
python中一切都是对象,异常也采用对象的方式来处理。处理过程:
1、抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。
2、捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常。
异常的示例
下面代码首先从控制台读取字符串,并将字符串转化为 int 数据类型,接着打印输入的数字,并将打印5除以该数字。当输入数字 0 程序会发生错误 ZeroDivisionError: division by zero ,输入字符串时程序会发生错误 ValueError 。
示例代码如下
i = int(input("请输入数字:"))
print(i)
print(5/i)
代码运行结果
示例代码如下(该程序只有当输入数字 66 时程序才会退出,否则将一直执行,且当输入的不是数字时会打印异常信息)
while True:
try:
x = int(input("请输入一个数字(输入66时程序退出):"))
print("输入的数字是:",x)
if x == 66:
print("程序退出")
break
except Exception as e:
print("异常,输入的不是数字!")
print(e)
代码运行结果
请输入一个数字(输入66时程序退出):88
输入的数字是: 88
请输入一个数字(输入66时程序退出):CSDN
异常,输入的不是数字!
invalid literal for int() with base 10: 'CSDN'
请输入一个数字(输入66时程序退出):
异常,输入的不是数字!
invalid literal for int() with base 10: ''
请输入一个数字(输入66时程序退出):66
输入的数字是: 66
程序退出
异常类继承层次
BaseException # 所有异常的基类
+-- SystemExit # 解释器请求退出
+-- KeyboardInterrupt 用户中断执行(通常是输入^C)
+-- GeneratorExit # 生成器(generator)发生异常来通知退出
+-- Exception # 常规异常的基类
+-- StopIteration # 迭代器没有更多的值
+-- StandardError # 标准错误
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocal