python-异常处理笔记
异常的介绍
程序在运行时,如果python解释器遇到一个错误,则会停止程序的执行,并且提示一些错误信息,就是异常。
程序停止执行,并且提示错误信息这个动作,通常称之为:抛出异常
例:错误类型:错误描述信息
FileNotFoundError: [Errno 2] No such file or directory: ‘test1.txt’
捕获异常的基本语法
捕获异常:程序代码在执行时,如果遇到异常,程序就会终止,不会继续执行
需求:程序遇到异常后,不会结束,可以继续执行
需求实现:使用异常捕获
try:
#尝试执行的代码
except: #可以捕获任意类型的异常
#出现异常时执行的代码
举例
num=input('请输入数字:')
try:
print(int(num))
except:
print('输入错误')
控制台:
请输入数字:i
输入错误
请输入数字:12
12
捕获指定类型的异常
发生的异常可能存在多种,针对不同类型的异常,解决处理的方案不一样
try:
#尝试执行的代码
except 异常类型1:
#出现异常类型1时执行的代码
except 异常类型2:
#出现异常类型2时执行的代码
except ......:
pass
num=input('请输入一个整数数字:')
try:
print(8/int(num))
except ZeroDivisionError:
print('被除数不能为零')
except ValueError:
print('输入内容非数字,请输入一个整数数字')
控制台:
请输入数字:0
被除数不能为零
请输入一个整数数字:e
输入内容非数字,请输入一个整数数字
请输入一个整数数字:4
2.0
捕获未知类型的异常(使用最多)
try:
#可能发生异常的代码
except Exception as 变量: #Exception常见异常的父类,变量是异常对象,print的时候可以通过该变量对象打印异常信息
#发生异常执行的代码
例
num=input('请输入一个整数数字:')
try:
print(8/int(num))
except Exception as e:
print(f'发生错误:{e}')
控制台:
请输入一个整数数字:j
发生错误:invalid literal for int() with base 10: 'j'
捕获异常的完整结构
try:
#可能发生异常的代码
except 异常类型:
#发生了指定类型的异常执行的代码
except exception as e:
#发生了其他类型异常执行的代码
else:
#没有发生异常执行的代码
finally:
#不管有没有发生异常,都会执行的代码
异常的传递
异常传递是python中已经实现好的功能,不需要我们写代码实现
异常传递是指,在函数的嵌套调用过程中,如果发生了异常,没有进行捕获,会将这个异常传递到函数调用的地方,直到被捕获为止,如果一直没有捕获,才会报错,终止执行
由于异常具有传递性,为使代码简洁可以在最外层(主函数)抛出异常
def demo1():
num=input("请输入一个整数:")
# try:
# num=int(num)
# except ValueError:
# print("您输入的不是整数!")
return int(num)
def demo2():
demo1()
if __name__ == '__main__':
try:
demo2()
except Exception as e:
print(e)
抛出异常
在执行代码的过程中,之所以会发生异常,终止代码执行,是因为代码执行遇到了raise关键字
raise关键字的作用,就是抛出异常,让代码终止执行
应用场景:自己书写代码模块,让别人使用,为了让别人按照你的规定去使用你的代码,你就可以在他不满足你条件的情况下,可以使用raise抛出异常
例
案例实现
方法一:
num=input('请输入一个数字:')
if num.isdigit():
if int(num)%2==0:
print('偶数')
else:
print('奇数')
else:
print('输入错误')
print('程序运行结束')
方法二:
num=input('请输入一个数字:')
try:
num=int(num)
except:
print('输入错误')
else:
if num%2==0:
print('偶数')
else:
print('奇数')
finally:
print('程序运行结束')