代码执行过程中出现报错一般怎么处理:
1、分析报错原因
2、找到自己写的代码当中的,第几行出错了
另外,我们可以捕获异常,抓到这个异常,可以加上我们自己额外的代码处理,再抛出异常
一般哪些方面要捕获异常:
与第三资源交互的时候,一定要处理异常,因为涉及到资源释放的问题,需要做清理工作,例如http连接/数据库连接/excel操作。
一、捕捉异常的语法
(切记,try和except是成双成对出现的,其他的可以不要)
try:
可能报错的代码
except:(try里的代码出错,则进入except)
捉到异常
(try代码出错之后会执行里面的代码)
raise (抛出异常)
else:
(try里面的代码没报错会执行的代码)
finally:
无论是否出现异常,一定会执行的代码
举个例子,如下打开文件,文件不存在的异常捕捉处理:
try:
fs = open(r"D:\pyjb\py001\py_01\cyyy.txt","r",encoding="utf-8")
except: #捕获异常
print("代码报错")
raise # 把异常信息抛出,让python接收到
else:
print("一切正常")
finally:
print("一定会执行的代码")
try:#由于一旦try里面的代码报错,则fs就不会被定义,因此这里也需要处理异常
fs.close() #清理收尾的工作
except:
pass# 若fs没被定义,就不用处理,直接忽略异常
【D:\pyjb\py001\py_01】这个目录下是没有cy.txt文件的,输出结果如下:
Traceback (most recent call last):
File "D:/pyjb/py001/py_01/cyy_c.py", line 28, in <module>
fs = open(r"D:\pyjb\py001\py_01\cyyy.txt","r",encoding="utf-8")
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\pyjb\\py001\\py_01\\cyyy.txt'
代码报错
一定会执行的代码
二、精准捕捉异常语法
python内置异常类型:
FileNotFoundError 请求不存在的文件或目录
KeyError 映射中没有这个键
等等,具体详细的可以参考这篇文章
下面举个例子:
try:
fs = open(r"D:\pyjb\py001\py_01\cyyy.txt","r",encoding="utf-8")
except FileNotFoundError: (精准的捕捉可以让自己更加精准的定位问题,从而达到快速解决问题的目的)
print("文件不存在!!!!!!!")(except 错误类型)精准捕捉可以连续写多个
raise
except:
print("不是FileNotFoundError类型异常,是其他异常")
输出结果如下:
Traceback (most recent call last):
File "D:/pyjb/py001/py_01/cyy_c.py", line 43, in <module>
fs = open(r"D:\pyjb\py001\py_01\cyyy.txt","r",encoding="utf-8")
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\pyjb\\py001\\py_01\\cyyy.txt'
文件不存在!!!!!!!
另外,如果实在不知道错误类型是什么,可以直接写Exception,因为所有内置的非系统退出类异常都派生自此类,是所有异常的基类。
三、raise:主动抛出异常的其他运用
场景:限定参数的类型,不是对应的类型,主动抛出错误
def add(a, b):
if not isinstance(a, int):
raise ValueError('a只能是int类型')
if not isinstance(b, int):
raise ValueError('b只能是int类型')
return a + b
res = add('aa', 'bb')
print(res)
输出如下:
raise ValueError('a只能是int类型')
ValueError: a只能是int类型