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...')
随机推荐
- v-bind指令
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tabhost实现android菜单切换
做APP项目已经有半个月了.慢慢地熟悉了这个开发环境和开发套路. 虽然是摸着石头过河.但也渐渐看到了水的深度! 作为一个电商项目APP,势必会涉及究竟部菜单条的功能.自己实现这个功能的过程是崎岖的,最 ...
- C语言restrict关键字的使用----可以用来优化代码
C99中新增加了restrict修饰的指针:由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取.对对象的存取都限定于基于由restr ...
- putty software caused connection abort
错误现象:在非常短的时间内就失去连接.并报"Software caused connection abort" 解决的方法:首先得排除是网络不是不通畅.假设在局域网中要确定IP没有 ...
- 在Qt Creator中为Qt工程添加资源
1.右键单击工程 -> Add New ... -> Qt -> Qt Resource File -> Choose... -> Name: -> Next -& ...
- springboot实现定时任务的两种方式
方式一:在springboot启动类上添加@EnableScheduling注解,然后创建具体的任务类,在方法上添加@Scheduled注解,并指明执行频率即可.如下: @Componentpubli ...
- (C)字节对齐#pragma pack()
1. 为什么要进行对齐 对于结构体,编译器会自动进行成员变量对齐处理,是为了提高运算效率. 缺省情况下是自然对齐方式. 2. 自然对齐 即默认对齐,按照结构体的成员中size最大的成员进行对齐. 例: ...
- SpringMVC配置环境中一般用的jar包
配置SpringMVC需要把这些jar包加入lib目录下 下载地址,复制到地址栏.回车即可下载 http://files.cnblogs.com/files/QW-lzm/SpringMVC----. ...
- 利用Swoole实现PHP+websocket直播,即使通讯
websocket Websocket只是一个网络通信协议,就像 http.ftp等都是网络通信的协议一样:相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebS ...
- uestc 250 windy数(数位dp)
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路:数位dp #include<iostream ...