python自动化笔记(五)——异常处理

代码执行过程中出现报错一般怎么处理:
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 映射中没有这个键
等等,具体详细的可以参考这篇文章

python所有的内置异常类型汇总

下面举个例子:

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类型
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页