写在前面
在任何编程语言中都难免会遇到异常(报错),如何查看报错、理解报错、避免报错、捕获报错信息,都是我们需要去应对的环节。
一、异常定义
异常:当程序检测到错误时,Python
解释器就无法继续执行了,此时会出现一些错误的提示,这就是所谓的”异常”,也就是我们常说的BUG
。
例如最常见的bug,打错函数名称:
pring("Biomamba")
# 这时就会返回报错,并告诉发生错误的位置和具体原因
NameError: name ‘pring’ is not defined
二、异常捕获
程序遇到bug
时会存在两种情况:1、终止程序。2、提醒出现的bug
并让整个程序继续运行。情况2就需要进行异常捕获
,从而防止整个程序因为一些小bug而停止运行
异常捕获基本语法:
try:
可能错误发生的代码 except:
如果出现异常则执行的代码
# 捕获异常(默认不区分异常类型):
try:
prinf('这条代码可能有异常')
except:
print("上条代码有异常,本条被输出")
# 可以看到以上几行代码没有报错,输出的内容则是except后的语句
## 上条代码有异常,本条被输出
# 捕获指定异常
# 例如这里捕获变量名称未定义的异常"NameError"
try:
print(Biomamba)
except NameError as aerror:
print("Biomamba未被定义")
# 可以看到错误成功被捕获,且备选方案被执行
## Biomamba未被定义
# 捕获指定异常
# 这里我们让异常不属于NameError:
try:
print(1/0)
except NameError :
print("Biomamba未被定义")
# 可以看到错误没有被捕获,提示信息被输出,备选代码也没有被执行
ZeroDivisionError: division by zero
# 捕获多个异常,except(异常1,异常2)
try:
print(1/0)
except(NameError,ZeroDivisionError):
print("这是备选代码执行结果")
# 可以看出备选代码被成功执行
## 这是备选代码执行结果
# 捕获所有类型异常
try:
print(1/0)
print(Biomamba)
except Exception:
print("这是备选代码执行结果")
# 可以看出备选代码被成功执行
## 这是备选代码执行结果
三、异常else
除了except
之外,还可以设置没有异常时选择执行的代码:
try:
print("这里没有异常")
except:
print("这是有异常后的执行结果")
else:
print("这是没有捕获到异常的执行结果")
# 大家可以体会一下上述几行代码的执行逻辑
## 这里没有异常
## 这是没有捕获到异常的执行结果
四、异常finally
不管有没有异常,finally
所包含的语句均会被执行:
# 有异常
try:
1/0
print("这里没有异常")
except:
print("这是有异常后的执行结果")
else:
print("这是没有捕获到异常的执行结果")
finally:
print("我在所有条件下都会被执行")
# 大家可以体会一下上述几行代码的执行逻辑
## 这是有异常后的执行结果
## 我在所有条件下都会被执行
# 无异常
try:
1+1
print("这里没有异常")
except:
print("这是有异常后的执行结果")
else:
print("这是没有捕获到异常的执行结果")
finally:
print("我在所有条件下都会被执行")
# 大家可以体会一下上述几行代码的执行逻辑
## 2
## 这里没有异常
## 这是没有捕获到异常的执行结果
## 我在所有条件下都会被执行
五、异常传递
异常是具有传递性的,可以用as来定义接收异常的变量:
try:
1/0
except Exception as my_error:
print("异常被成功捕获,下面是异常的具体信息:\n")
print(my_error)
# 可以看到除数异常被成功捕获
## 异常被成功捕获,下面是异常的具体信息:
##
## division by zero
# 但异常的捕获是一个局部变量,跳出异常捕获语句后捕获的异常变量就失效了:
try:
1/0
except Exception as my_error:
print("异常被成功捕获,下面是异常的具体信息:\n")
print(my_error)
# 可以看到除数异常被成功捕获,但my_error变量不存在
NameError: name ‘my_error’ is not defined
NameError: name ‘my_error’ is not defined
往期回顾
如何联系我们
公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号[Biomamba],方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容
网友评论