前言:
作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
python初识异常
什么是异常?
异常就是错误,我们把代码的错误叫做异常的抛出
异常会导致程序崩溃并停止运行
我们需要处理这些异常才能保证程序继续正常运行
如何处理异常?
通过监控并捕获到异常,将异常部位的程序进行修理使得程序继续正常运行
处理异常的语法:
try:
<代码块> # 此为被try关键字监控并保护的业务代码块
except <异常的类型>:
<异常处理代码块> # 上面的代码块出现错误后执行的代码块
程序在执行try中的代码块时,如果不会出错,将不会走到except下的代码块。
例子:
之前学过upper()
函数是将字母大写,它接收的参数必须是个字符串类型,否则会报错。
用异常来捕获这个错误,并处理一下,使程序不要直接报错,而是给一个相对友好的提示。
捕获通用异常
无法确定是哪种异常的情况下使用的捕获方法
try:
<代码块>
except Exception as e:
<异常处理代码块>
注意:这个语法是固定的 Exception
是一个类,里面包含了浩瀚的异常库。as e
相当于将 Exception
重命名为e
例子:
用通用异常的方式来返回上面例子中的异常原因:
捕获具体异常
确定是哪种异常的情况下使用的捕获方法
如果我们确定异常是哪种类型,就要使用具体异常的方法去捕获,这样比使用通用异常要更加节省性能(因为通用异常需要从浩瀚的异常库里查找这次出现的异常是什么类型。)
try:
<代码块>
except <具体的异常类型> as e:
<异常处理代码块>
例子:
我们已知0被做为除数的异常类型是ZeroDivisionError
,用这个异常类型去捕获0被做为除数出现的异常:
捕获多个异常
程序处理过程中,很可能会出现多个异常,而且异常的类型不相同。
当然使用通用异常类型是可以捕获的,但我们知道使用具体异常可以节省性能,那么怎么做呢?
第一种方法:
try:
<代码块>
except <异常类型1> as e:
print(e)
except <异常类型2> as e:
print(e)
...
注意:当except代码块有多个的时候,当捕获到一个异常后,不会再继续往下捕获
第二种方法:推荐使用这种
try:
<代码块>
except (<异常类型1>, <异常类型2>) as e: # 用元组的形式将多个异常类型包裹起来
print(e)
例子:
常见的异常类型
异常名称 | 描述 |
---|---|
Exception | 通用异常类型(基类) |
ZeroDivisionError | 不能整除0 |
AttributeError | 对象没有这个属性 |
IOError | 输入输出操作失败 |
IndexError | 没有当前的索引 |
KeyError | 没有这个键 |
NameError | 没有这个变量(未初始化对象) |
SyntaxError | python语法错误 |
SystemError | 解释器的系统错误 |
ValueError | 传入的参数错误 |
下面举几个例子: