在执行一个语句的时候可能会遇见各种问题,报错。如果能考虑到这些问题并且做出相应的处理,就能使程序遇到异常情况也不断掉,继续执行
Python中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。
Python中内建异常类的继承层次
try-except基本结构
try: copyFile("d:/a.txt","e:/a.txt") except: print("文件无法拷贝")
try: copyFile("d:/a.txt","e:/a.txt") except BaseException as e: print(e) print("文件无法拷贝")
这两种写法的区别就在于第二种写法可以打印出报错而程序又不停
BaseException是异常基类,是所有异常的父类
try-多except结构try: a=input("请输入一个被除数:") b=input("请输入一个除数:") c=float(a)/float(b) print(c) except ZeroDivisionError: print("异常。不能除以0") except ValueError: print("异常。不能将字符串转化成数字") except NameError: print("异常。变量不存在")
多个except结构的顺序是先子类后父类,不然如果把BaseExcept放在最前面那么所有异常就都会到它这里了,后面就没机会了
try-except-else结构
try..except..else结构增加了“else块”。如果try块中没有抛出异常,则执行else块。如果try块中抛出异常,则执行except块,不执行else块。
try: a=input("请输入被除数:") b=input("请输入除数:") c=float(a)/float(b) except BaseException as e: print(e) else: print("除的结果是:",c)
try-except-finally结构
try..except..finally 结构中,finally块无论是否发生异常都会被执行;通常用来释放try块中
申请的资源。try: a=input("请输入一个被除数:") b=input("请输入一个除数:") c=float(a)/float(b) except BaseException as e: print(e) else: print(c) finally: print("我是finally中的语句,无论发生异常与否,都执行!") print("程序结束!")
traceback异常信息
import traceback try: print('step1') num = 1/0 except: traceback.print_exc() print("文件无法拷贝")
这样可以不用except BaseException as e就可以输出异常信息
将异常信息输出到指定文件中
import traceback try: print('step1') num = 1/0 except: with open('a.txt','w') as f: traceback.print_exc(file=f) print("文件无法拷贝")
当try中的语句发生异常后,异常部位以后的语句是不会执行了, 直接跳到except
Python —— 异常处理(try-except)
于 2021-07-14 17:34:43 首次发布