什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
具体的异常处理:
1、使用try-except方法,可以将指定的可能会发生报错的部分放到内部消化,自身解决错误问题,使得程序继续进行
'''使用try-except方法,将指定报错部分在内部消化吸收,让程序继续执行'''
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
result=a/b
print('结果为:',result)
except ZeroDivisionError:
print('除法中除数不能为0')
print('程序结束finish')
请输入一个整数10
请输入另一个整数0
除法中除数不能为0
程序结束finish
(2)如果在上述情况中输入的不是整数型数字(字母、符号、空格等),则程序依然会报错,因为except里面能消化的是ZeroDivisionError这种情况。就是程序出现的异常和except中要补的异常类型不一样。程序直接终端了
请输入一个整数q
ValueError: invalid literal for int() with base 10: 'q'
(3)当要捕获的异常和出现的异常类型不一致时,可以采用多个except结构,在结构的最后加上BaseException(当不知道会出现什么错误的时候就可以用这个)
***BaseException使用的情况:
a.前面已经有了几种异常捕捉,后面不知道还会出现什么异样,用一个BaseException来囊括其他的异常情况
b.我就是懒,直接用一个BaseException囊括所有异常情况
try:
a=int(input('请输入一个整数'))
b=int(input('请输入另一个整数'))
result=a/b
print('结果为:',result)
except ZeroDivisionError:
print('除法中除数不能为0')
except ValueError:
print('只能输入数字串数据')
print('程序结束finish')
请输入一个整数10
请输入另一个整数qq
只能输入数字串数据
程序结束finish
2、try-except-else方法:如果try部分中有异常,则根据异常的情况执行相应的except部分;如try部分没有异常,则执行else部分
try:
num1=int(input('请输入一个整数'))
num2=int(input('请再输入一个整数'))
result=num1/num2
except ZeroDivisionError:
print('除法中除数不能为0')
except ValueError:
print('只能输入数字串数据')
# 或者如果这里不知道会出现什么异常时,就可以用BaseException
'''except BaseException as seem: 这里的as seem是给异常情况起一个别名叫seem
print('程序内有错误',seem) #可以输出异常情况
'''
else:
print('结果为:',result)
#BaseException语句情况
请输入一个整数10
请再输入一个整数a
程序内有错误 invalid literal for int() with base 10: 'a'
#这里前面时输出出现异常时的print,后面是这个seem里面带有的东西
3、try...except...else...finally结构
finally语块:无论是否发生异常都会执行,常常用来释放try语块中申请的资源
try:
num1=int(input('请输入一个整数'))
num2=int(input('请再输入一个整数'))
result=num1/num2
except BaseException as seem:
print('程序内有错误',seem)
else:
print('结果为:',result)
finally: #说实话,可有可无
print('无论程序中是是否出现异常错误,我自己还将会继续被执行')
print('程序结束')
请输入一个整数45
请再输入一个整数5
结果为: 9.0
无论程序中是是否出现异常错误,我自己还将会继续被执行
程序结束
4、traceback模块
使用traceback模块可以打印异常信息,非异常部分继续输出
import traceback
try:
print('This is a nice day for you to have a picnic')
print(10/0)
except: #这里可以可以写具体的异常类型,也可以不写,直接加冒号
traceback.print_exc()
This is a nice day for you to have a picnic
Traceback (most recent call last):
File "D:/Python学习/第十一章/demo9 traceback模块.py", line 9, in <module>
print(10/0)
ZeroDivisionError: division by zero