转自:http://www.cnblogs.com/vamei/archive/2012/07/10/2582787.html

异常处理

在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容错性。

我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。

我们以它为例,来说明基本的异常处理。

一个包含异常的程序:

re = iter(range(5))for i in range(100):print re.next()print 'HaHaHaHa'

首先,我们定义了一个循环对象re,该循环对象将进行5次循环,每次使用序列的一个元素。

在随后的for循环中,我们手工调用next()函数。当循环进行到第6次的时候,re.next()不会再返回元素,而是抛出(raise)StopIteration的异常。整个程序将会中断。

我们可以修改以上异常程序,直到完美的没有bug。但另一方面,如果我们在写程序的时候,知道这里可能犯错以及可能的犯错类型,我们可以针对该异常类型定义好”应急预案“。

re = iter(range(5))try:for i in range(100):print re.next()
except StopIteration:print 'here is end ',iprint 'HaHaHaHa'

在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过。

随后,程序将继续运行,而不是彻底中断。

完整的语法结构如下:

try:...
except exception1:...
except exception2:    ...except:...
else:...
finally:...

如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception1, exception2...,直到找到其归属,执行相应的except中的语句。如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。比如:

try:print(a*2)
except TypeError:print("TypeError")
except:print("Not Type Error & Error noted")

由于a没有定义,所以是NameError。异常最终被except:部分的程序捕捉。

如果无法将异常交给合适的对象,异常将继续向上层抛出,直到被捕捉或者造成主程序报错。比如下面的程序

def test_func():try:m = 1/0except NameError:print("Catch NameError in the sub-function")try:test_func()
except ZeroDivisionError:print("Catch error in the main program")

子程序的try...except...结构无法处理相应的除以0的错误,所以错误被抛给上层的主程序。

如果try中没有异常,那么except部分将跳过,执行else中的语句。

finally是无论是否有异常,最后都要做的一些事情。

流程如下,

try->异常->except->finally

try->无异常->else->finally

抛出异常

我们也可以自己写一个抛出异常的例子:

print 'Lalala'
raise StopIteration
print 'Hahaha'

这个例子不具备任何实际意义。只是为了说明raise语句的作用。

StopIteration是一个类。抛出异常时,会自动有一个中间环节,就是生成StopIteration的一个对象。Python实际上抛出的,是这个对象。当然,也可以自行生成对象:

raise StopIteration()

总结

try: ... except exception: ... else: ... finally: ...
raise exception

转载于:https://www.cnblogs.com/saryli/p/5019262.html

python --异常处理相关推荐

  1. python示例异常处理与程序调试_笔记:Python异常处理与程序调试

    Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...

  2. Python 异常处理--raise函数用法

    Python 异常处理--raise函数用法 参考文章: (1)Python 异常处理--raise函数用法 (2)https://www.cnblogs.com/darkgui34/p/405074 ...

  3. python异常处理--try except else raise finally

    python异常处理--try except else raise finally 参考文章: (1)python异常处理--try except else raise finally (2)http ...

  4. python 异常处理 try except

    python 异常处理 try except 参考文章: (1)python 异常处理 try except (2)https://www.cnblogs.com/brave1/p/10252739. ...

  5. python异常处理(基础)

    python异常处理(基础) 参考文章: (1)python异常处理(基础) (2)https://www.cnblogs.com/fnng/p/3518202.html 备忘一下.

  6. python处理流程-Python异常处理大全(二)

    原标题:Python异常处理大全(二) 本文是Python异常处理教程的第二部分,上部分我们简单的介绍了几种异常,及其处理办法,这部分我们将更详细地对Python中产生的异常处理方法进行探讨. 函数使 ...

  7. 十一、Python异常处理

    Python异常处理 异常抛出机制,为程序开发人员提供了一种在运行时发现错误,进行回复处理,然后继续执行的能力 #!/usr/bin/python try: open('abc.txt') excep ...

  8. Python异常处理体系简介(1)

    http://developer.51cto.com/art/200902/111535.htm Python异常处理体系 1.Python内建异常体系结构 The class hierarchy f ...

  9. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析

    本文实例讲述了python异常处理.自定义异常.断言原理与用法.分享给大家供大家参考,具体如下: 什么是异常: 当程序遭遇某些非正常问题的时候就会抛出异常:比如int()只能处理能转化成int的对象, ...

  10. 【Python】1054 求平均值(Python异常处理练习)

    1. 题目 2. 代码 重坑,读题不仔细,导致耗时多. 题目中合法数字当只用一个的时候,输出的结果中的是number,而不是numbers # https://pintia.cn/problem-se ...

最新文章

  1. Spring JDBC-自增键和行集RowSet
  2. yspider爬取数据导入mysql_爬虫实战四、PyCharm+Scrapy爬取数据并存入MySQL
  3. 【ABAP】SAP销售订单定价值变更
  4. 订单库存是否与库存地有关
  5. C#是面向对象编程语言
  6. 银行数字化转型指南:《区域性银行数字化转型白皮书》完整版重磅发布
  7. 【报错笔记】MAVEN pom.xml 报错解决方法
  8. Information Retrieval 倒排索引 学习笔记
  9. chdir函数_PHP chdir()函数与示例
  10. 工作298:无路由页面
  11. 带你从零入门 Serverless | 一文详解 Serverless 架构模式
  12. python爬虫高级知识点_Python爬虫知识点梳理总结,殿堂级小白入门必读
  13. 剑指offer值二叉树的下一个结点
  14. 可用性SLA还不懂?看完这个故事就懂了........ | 凌云时刻
  15. 数据包络分析法(DEA)_1
  16. springboot redis: xxx as a subtype of [simple type, class java.lang.Object]: no such class found
  17. 移动apn接入点哪个快_4g网速最快的apn接入点 如图所示
  18. 树莓派--【vim配置】
  19. 世界上最健康的作息时间表健康十不易
  20. 1142:单词的长度

热门文章

  1. 企业网站着手准备网站推广前如何识别目标用户需求?
  2. 网络推广中网络推广专员如何培养与搜索引擎的友好度和信任度
  3. 网站推广——seo优化对企业网站推广能力的提升有着不小的帮助
  4. 移动端、PC端网站优化需齐头并进
  5. 网站建设注重用户体验尤为重要
  6. mysql访问oracle数据_python访问Oracle及Mysql数据库
  7. oracle数据库多表嵌套,sql – 在oracle中更新多个嵌套表中的多个记录
  8. react 显示当前时间_react中monent如何获取日期?
  9. SubBuilder使用
  10. windows RabbitMq 安装