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...')

随机推荐

  1. centos6.3升级python至2.7.5

    centos6.3自带的python版本是2.6.6,有时候需要升级到2.7.这里记录一下升级过程,方便查阅.实际上是转载自http://flyingdutchman.iteye.com/blog/1 ...

  2. innodb 乐观插入因空间不够导致失败,进入悲观插入阶段,这个空间的大小限制

    btr_cur_optimistic_insert{ ... /*检查分裂页时是否有足够的空间预留给未来记录的update*/ if (leaf && !zip_size && ...

  3. huawei校招测试题

    三道题两小时. 第一题,圈住所有点的长方形,很简单略过. 第二题:奇偶排序. 奇偶排序 描述: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序 ...

  4. apache benchmark

    1 ab是什么 是一个web高并发测试工具,可以发送get.put.post请求. 2 ab -n和-c共存 -c是concurrency的缩写,即同一时间发送多个请求. -n是指本次总共发送多少个请 ...

  5. poj 1742 Coins(二进制拆分+bitset优化多重背包)

    \(Coins\) \(solution:\) 这道题很短,开门见山,很明显的告诉了读者这是一道多重背包.但是这道题的数据范围很不友好,它不允许我们直接将这一题当做01背包去做.于是我们得想一想优化. ...

  6. vue 移动端开发

    1.vue开发中的路由: 关于require 与import 的区别 2.vue中的mock数据 3.

  7. IDEA maven dependency自动提示

    通过File->setting->maven->repositories,选择本地仓库,点击右上角更新,更新maven仓库索引 在pom.xml编写引入依赖的jar包时,已经下载到本 ...

  8. linux初级学习笔记七:linux用户管理,密码和组命令详解!(视频序号:04_1)

    本节学习的命令: 用户管理命令:useradd,userdel,id,finger,usermod,chsh,chfn,passwd,pwck, 组管理命令:groupadd,groupmod,gro ...

  9. ios 图片拉伸方法

     前提:要注意图片的size和展示的图片view的size的大小. 假如图片高度50,展示图片view的高度30,拉伸会变成剪切. 如果图片尺寸不对,可以用mac自带的图片编辑器修改大小: 双击打开图 ...

  10. 【前端】CentOS 7 系列教程之一: 安装 node 最新版

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_1.html 此系列教程从零开始,安装node.mysql.git,nginx.并且设置git自动部署. ...