文档开发者中心
我的

7段代码带你玩转Python条件语句下篇

  • 代码清单⑤ try语句处理除零异常


In[6]: number = 0
# 以变量number作被除数,尝试运行除法操作
try:
print('1.0 / number =', 1.0 / number)
# 如果异常是除零异常,输出提示信息
except ZeroDivisionError:
print('***除数为0***')

Out[6]: ***除数为0***


在代码清单⑤中,由于0不能做除数,因此引发了除零异常。except代码块由于给出了ZeroDivisionError的解决方案,因此被执行,程序得以完整地运行。


代码清单⑤所展示的异常之间的层次差别是有意义的,这在程序执行过程中可以体现,如代码清单⑥所示。


  • 代码清单⑥ Python异常层次差异


In[7]: dict1={'a': 1, 'b': 2, 'v': 22}
# 尝试索引赋值dict中不存在的值
try:
x = dict1['y']
except LookupError:
print('查询错误')
except KeyError:
print('键错误')
else:
print(x)

Out[7]: 查询错误

In[8]: # 调换LookupError和KeyError处理代码块的顺序
dict2={'a': 1, 'b': 2, 'v': 22}
# 尝试索引赋值dict中不存在的值
try:
x = dict2['y']
except KeyError:
print('键错误')
except LookupError:
print('查询错误')
else:
print(x)

Out[8]: 键错误


代码清单⑥展示的try-except-else语句尝试查询不在dict中的键值对,从而引发了异常。这一异常准确地说应属于KeyError,但由于KeyError是LookupError的子类,且在代码清单⑥中将LookupError置于KeyError之前,因此程序优先执行该except代码块。所以,使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。


除自然发生的异常外,Python中的raise语句可用于故意引发异常。使用该语句引发异常时,只需在raise后输入异常名即可,如代码清单⑦所示。


  • 代码清单⑦ raise语句


In[9]: # 尝试引发IndexError
try:
raise IndexError
except KeyError:
print ('in KeyError except')
except IndexError:
print('in IndexError except')
else:
print('no exception')

Out[9]: in IndexError except


本文摘编自《Python3智能数据分析快速入门》,经出版方授权发布。

(*本文为Python大本营转载文章,转载请联系原作者)


点赞
收藏
回复
2
分享
举报
浏览345 发布于2019-11-18 12:41未知归属地
全部评论
最多点赞
最新发布
最早发布

应该放个前面部分的文章超链

2楼回复于2019-11-19 09:04 未知归属地

感觉没头没尾的

1楼回复于2019-11-19 09:03 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。