【基础10】【自学笔记】python错误异常处理
一、如何抛出异常?
异常的产生有两种来源:
-
一种是程序自动抛出,比如
1/0
会自动抛出 ZeroDivisionError -
一种是开发者主动抛出,使用
raise
关键字抛出。
示例:
def demo_func(filename): if not os.path.isfile(filename): raise Exception
二.常见异常总结
1.SynataxError:语法错误
解决方法: ①查看代码有没有红色波浪线 ②熟悉python基本语法
2.NameError:试图访问的变量名不存在
解决方法: ①检查对应的变量名是否有定义并赋值,是否写错了变量名称
3.IndexError:索引错误,使用的所以你不存在,常为索引超出序列范围
解决方法: ①检查lis对象索引选择是否超出了本来的长度
4.KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
解决方法: ①检查字典里是否存在这个key值
5.TypeError:类型错误,内建操作或是函数应于在错误类型的对象时会引发类型错误
解决方法: ①检查清楚数据类型是否有误
6.ValueError:值错误,传给对象的参数类型不正确,例如给int()函数传入了字符串数据类型
解决方法: ①弄清楚形参的数据类型 ②再传对应形参的数据类型
7.AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
解决方法: ①检查类里是否存在这个被调用的方法 ②一般不能自动匹配出方法的多半有问题
8.IOError:输入输出错误
解决方法: ①找到代码中关于输入输出的相关操作 ②检查文件路径和名称对不对
异常不局限于以上八中,这只是很常见的八种异常
三、抛出异常的几种方式?
1.try...except组合语法
(1)代码:
try:
正常的操作
except:
发生异常,执行这块代码
try: f=open("d:\\test.txt","r") f.read() print("文件读写错误") except IOError: print("IO读写出错")
2.try...except...else组合语法
(1)代码:
try:
正常的操作
except:
发生异常,执行这块代码
else:
如果没有异常,执行这块代码
try: f=open("d:\\test.txt","r") f.read() print("文件读写错误") except IOError: print("IO读写出错") else: print("文件写入成功")
3.try...except...except(多个异常处理)
(1)代码:
try:
正常的操作
except A:
发生异常A,执行这块代码
except B:
发生异常B,执行这块代码
except:
发生其它异常,执行这块代码
else:
如果没有异常,执行这块代码
try: f=open("d:\\test.txt","r") f.read() print("文件读写错误") except IOError: print("IO读写出错") except: print("其他未知异常") else: print("文件写入成功")
4.try...except(A,B)(一次捕获多个异常)
(1)代码:
try:
正常的操作
except(A,B):
发生异常A和B,执行这块代码
try: f=open("d:\\test.txt","r") f.read() print("文件读写错误") except (IOError,TypeError): print("读取文件时出现异常") else: print("文件写入成功")
5、try...except...finally组合语法
(1)代码:
try: 代码A except [exception] as e: 代码B finally: 代码C
>>> try: ... 1/0 ... except ZeroDivisionError as e: ... print("发生了异常:错误信息如下: \n" + str(e)) ... finally: ... print("程序运行结束!!") ... 发生了异常:错误信息如下: integer division or modulo by zero 程序运行结束!!
万能异常处理:-所有的异常都继承Exception
try: f=open("d:\\test.txt","r") f.read() print("文件读写错误") except Exception as e: print("读取文件时出现异常") print("e的内容"+str(e)) else: print("文件写入成功")
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/15727553.html