try/except/finally
Python也不例外,跟其他高级语言一样,内置了一套try...except...finally...的错误处理机制
当认为某些代码可能会出错时,就可以用try来运行这段代码
使用try时,要么except和finally至少要有一个存在,否则会无法通过编译
捕获异常的意义在于,可以阻止程序意外中止,或以预想的方式中止,如果不捕获异常,错误会被解释器捕获,那么程序也就中止了
try...except...finally...机制
如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块
如果有finally语句块,执行完except后,则执行finally语句块,至此,执行完毕
不管有没有报错,finally下的语句都一定会被执行
try:
......
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
错误的继承
Python的错误其实也是class,所有的错误类型都继承自BaseException
所以在使用except时需要注意的是,它不但捕获该类对应的错误,还会捕获其子类对应的错误
比如AError是BError的父类,如果except AError在先,except BError在后,
但若错误被except AError捕获,且该错误也属于BError,则该错误不会被except BError所捕获
Python所有的错误都是从BaseException类派生的
常见的错误类型和继承关系请参照链接:https://docs.python.org/3/library/exceptions.html#exception-hierarchy
try:
......
except ValueError as e:
print('ValueError')
except UnicodeError as e:
#第二个except永远也捕获不到UnicodeError,因为UnicodeError是ValueError的子类,如果有,也被第一个except给捕获了
print('UnicodeError')
跨越多层调用
使用try...except捕获错误还有一个巨大的好处,就是可以跨越多层调用
比如函数main()调用bar(),bar()调用foo(),如果foo()出错,则只要main()捕获即可
无需在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误即可,因此大大减少了写try...except...finally的麻烦
def foo(s):
return 10 / int(s) def bar(s):
return foo(s) * 2 def main():
try:
bar('')
except Exception as e:
print('Error:', e)
finally:
print('finally...')
随机推荐
- C++再论单例模式
#include <iostream> #include <windows.h> #include <mutex> std::mutex gmutex; using ...
- 解决:Android4.3锁屏界面Emergency calls only - China Unicom与EMERGENCY CALL语义反复
从图片中我们能够看到,这里在语义上有一定的反复,当然这是谷歌的原始设计.这个问题在博客上进行共享从表面上来看着实没有什么太大的意义,只是因为Android4.3在锁屏功能上比起老版本号做了非常大的修改 ...
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
这里能够简单的改动随意函数的返回地址.能够做到自己定义EIP的指向,就可以运行当前进程空间的随意指令,这里仅仅是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取随意 ...
- Tomcat 安装与配置规范
Tomcat 安装 演示版本:8.5.32 安装版 JDK推荐版本:jdk1.8 下载地址:https://tomcat.apache.org/download-80.cgi 安装教程 注意:tomc ...
- VUE 之 路由 VueRouter
1.VueRouter的安装 1.1.https://unpkg.com/vue-router/dist/vue-router.js下载安装. 1.2.<script src="./s ...
- js对闭包的理解
原文链接http://www.jb51.net/article/24101.htm,讲的很好,清晰明了.
- XMU C语言程序设计实践(3)
问题描述: 以一个n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论. 对于本问题需用栈实现“穷举求解”算法,即:从 ...
- Codeforces Round #352 (Div. 2) C. Recycling Bottles
C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 配置webpack中externals来减少打包后vendor.js的体积
在日常的项目开发中,我们会用到各种第三方库来提高效率,但随之带来的问题就是打包后的vendor.js体积过大,导致加载时空白页时间过长,给用户的体验太差.为此我们需要减少vendor.js的体积,从本 ...
- vue 数组和对象渲染问题
vue 数组和对象渲染问题 最近项目有点忙碌,遇到好多问题都没有总结(╥﹏╥),在开发过程中,取vuex中的数组渲染完成之后,再次修改数组的值,数据更新了,但是视图并没有更新.以为是数组更新的问题,后 ...