python的异常
2011年07月04日
Python内建异常体系结构 BaseException
+--SystemExit
+--KeyboardInterrupt
+--GeneratorExit
+--Exception
+--StopIteration
+--StandardError
| +--BufferError
| +--ArithmeticError
| | +--FloatingPointError
| | +--OverflowError
| | +--ZeroDivisionError
| +--AssertionError
| +--AttributeError
| +--EnvironmentError
| | +--IOError
| | +--OSError
| | +--WindowsError (Windows)
| | +--VMSError (VMS)
| +--EOFError
| +--ImportError
| +--LookupError
| | +--IndexError
| | +--KeyError
| +--MemoryError
| +--NameError
| | +--UnboundLocalError
| +--ReferenceError
| +--RuntimeError
| | +--NotImplementedError
| +--SyntaxError
| | +--IndentationError
| | +--TabError
| +--SystemError
| +--TypeError
| +--ValueError
| +--UnicodeError
| +--UnicodeDecodeError
| +--UnicodeEncodeError
| +--UnicodeTranslateError
+--Warning
+--DeprecationWarning
+--PendingDeprecationWarning
+--RuntimeWarning
+--SyntaxWarning
+--UserWarning
+--FutureWarning
+--ImportWarning
+--UnicodeWarning
+--BytesWarning
try 捕获由Python或程序本身引发的异常 raise 手工地引发一个异常
为什么要使用异常
错误处理,当python检查以程序运行时的错误就引发异常,你可以在程序里捕捉和处理这些错误,或者忽略它们。 事件通知,异常也可以作为某种条件的信号,而不需要在程序里传送结果标志或显式地测试它们。 特殊情形处理,有时有些情况是很少发生的,把相应的处理代码改为异常处理会更好一些。 奇特的控制流,异常是一个高层次的"goto",可以把它作为实现奇特的控制流的基础。如反向跟踪等。
异常的基础知识
python的try语句有两种风格---一种是处理异常(try/except/else),一种是无论是否发生异常都将执行最后的代码(try/finally)。
try/except/else风格 try:
#运行别的代码
except:
#如果在try部份引发了'name'异常
except,:
#如果引发了'name'异常,获得附加的数据
else:
#如果没有异常发生
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
try/finally风格 try:
finally:
#退出try时总会执行
raise
python总会执行finally子句,无论try子句执行时是否发一异常。
如果没有发生异常,python运行try子句,然后是finally子句,然后继续。 如果在try子句发生了异常,python就会回来执行finally子句,然后把异常递交给上层try,控制流不会通过整个try语句。
当你想无论是否发生异常都确保执行某些代码时,try/finally是有用的。
raise
要引发异常,你需要写raise语句,它的形式很简单,raise后面跟着要引发的异常。 raise #手工地引发异常
raise, #传递一个附加的数据
什么是异常名(name)呢?它也许是内置作用域内的内置异常(如IndexError),或者是你程序中的任意字符串对象。
缺省行为:显示错误信息。 $ python test.py
Traceback (innermost last):
File"test.py", line 3, in? a =1/0
ZeroDivisionError: integer division ormodulo
当一个未捕获的异常发生时,python将结束程序并打印一个堆栈跟踪信息,以及异常名和附加信息。
用try捕获内置异常
如果你不想在异常发生时结束你的程序,只需在try里捕获它。 #!/usr/bin/python
try:
a =1/0
printa except:
print'i get the error'
当程序运行是会捕获一个错误并执行except后面的代码。
异常的惯用法
异常并不总是坏事情,例如,文件对象的read方法在文件尾时返回一个空串,python也提供一个内置函数raw_input,它从标准输入流读入。与read方法不同,当遇到文件尾时,raw_input()引发内置的EOFError错误。所以可以这样用: while1:
try:
line =raw_input() #从stdin读入行
exceptEOFError:
break #在文件末尾退出循环
esle:
# 其它处理代码
用异常传递成功的信号 Found ='item found'
defsearch():
引发或返回Found
try:
search()
exceptFound:
successful
else:
fail
可以使用try来调试代码,你可以用自已的异常处理替换python缺省的异常处理。把整个程序封装在一个外部try里面,你可以捕获运行时的任何异常。
异常捕获模式 try语句子句形式表
except: 捕获所有异常
exceptname: 只捕获特定的异常
exceptname,value: 捕获异常和它的附加数据
except(name1,name2): 捕获任何列出的异常
else: 如果没有异常
finally: 总是执行
捕获多个异常中的一个,python从上到下地查看except子句,括号里列出多个异常与列出单独的异常是一样的,只是更简洁一些。
运行时嵌套的异常,python会匹配最近的except。
finally子句无论如何都会执行,所以它是做清除动作的好地方,如关闭一个文件的操作。
捕捉所有异常 try:
# 你的代码
exceptBaseException, e:
print(str(e))
发表评论
-
http://www.cnblogs.com/yungboy/archive/2010/05/28/1746376.html
2012-01-20 09:36 1005http://www.cnblogs.com/yungboy/ ... -
MyEclipse 8.6.1 Android开发环境配置
2012-01-20 09:36 1025MyEclipse 8.6.1 Android开发 ... -
PowerShell2.0之Windows排错(六)检查网络故障
2012-01-20 09:36 722PowerShell2.0之Windows排错(六)检查网络故 ... -
再一次在Eclipse下配置Android
2012-01-20 09:36 629再一次在Eclipse下配置And ... -
visual studio 2010 之二 修改WindowsSdkDir宏
2012-01-20 09:35 880visual studio 2010 之二 修改Windows ... -
MyEclipse无法自动编译解决方案
2012-01-19 14:39 795MyEclipse无法自动编译解 ... -
用MyEclipse建立Web Service工程(下)
2012-01-19 14:38 635用MyEclipse建立Web Service工程(下) 2 ... -
如何向MyEclipse导入已有项目
2012-01-19 14:38 1151如何向MyEclipse导入已有项目 2011年06月18日 ... -
OpenGL的安装
2012-01-19 14:38 630OpenGL的安装 2010年06月20 ... -
(转)关于OpenGL的安装
2012-01-19 14:38 570(转)关于OpenGL的安装 201 ... -
JavaScript中两种类型的全局对象/函数
2012-01-17 04:25 549JavaScript中两种类型的全 ... -
JAVASCRIPT 技巧
2012-01-17 04:25 617JAVASCRIPT 技巧 2011年05月 ... -
[转载]JQUERY刷新页面
2012-01-17 04:25 704[转载]JQUERY刷新页面 201 ... -
100多个很有用的JavaScript函数以及基础写法汇总
2012-01-17 04:25 521100多个很有用的JavaScript函数以及基础写法汇总 ... -
赞美词语鼓励词句
2012-01-16 03:14 2616赞美词语鼓励词句 2009年10月02日 赞美容貌的词语 ... -
赞美女性的词语大全
2012-01-16 03:14 590赞美女性的词语大全 2010年07月18日 温柔、体贴 ... -
赞美女性的词语
2012-01-16 03:14 834赞美女性的词语 2010年05月21日 温 ... -
赞美女性的词语大全
2012-01-16 03:14 620赞美女性的词语大全 2009年09月22日 赞美女性的词 ...
相关推荐
Python异常和错误实践手册,新手必备
【课程简介】 清华大学出品的Python课件...第9章 Python异常.pptx 第10章 Python文件操作.pptx 第11章 Python项目实战:爬虫程序.pptx 第12章 Python项目实战:数据可视化.pptx 第13章 Python项目实战:数据分析.pptx
翻译自StackOverflow中一个关于Python异常处理的问答。 问题:为什么“except:pass”是一个不好的编程习惯? 我时常在StackOverflow上看到有人评论关于except: pass的使用,他们都提到这是一个不好的Python编程习惯...
Python 异常处理、异常名称及实例
通过具体实例更加深入了解异常,熟练掌握try ... except 的用法,try ... Exception as xxx作为全能的异常处理模板
Python异常处理函数和模块学习教案.pptx
Python异常思维导图,便捷整理思路,异常简介、捕获异常、异常传递、自定义异常、异常处理中的抛出异常
CICIDS2017数据集包含良性和最新的常见攻击,与真实的现实世界数据(PCAPs)相类似。它还包括使用CICFlowMeter进行网络流量分析的结果,并根据时间戳、源和目的IP、源和目的端口、协议和攻击来标记流量(CSV文件)。...
毕业设计 基于Python异常检测技术的恶意代码对抗样本识别源码+部署文档+全部数据资料(优秀项目).zip毕业设计 基于Python异常检测技术的恶意代码对抗样本识别源码+部署文档+全部数据资料(优秀项目).zip毕业设计 ...
【完整课程列表】 完整图文版教程 优质的Python基础入门教程 02、程序的灵魂-算法 (共11页).pptx 完整图文版教程 优质的Python基础...完整图文版教程 优质的Python基础入门教程 15、Python异常处理 (共30页).pptx
python异常.md
15.python异常处理1
python异常处理学习.docx
本文实例讲述了Python 异常的捕获、异常的传递与主动抛出异常操作。分享给大家供大家参考,具体如下: 异常的捕获 demo.py(异常的捕获): try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) #...
Python 异常机制 09_自定义异常类_raise抛出异常.mp4
简单介绍Python中的错误和异常,重点介绍Python中的异常处理机制,包括主要的关键字:try、except、finally、else等,以及它们组合使用时程序执行的流程等,非常适合高校老师教学和学生课后复习使用。
Python 异常机制 第九章 异常和错误.pdf
python异常报错详解.txt
python异常总结,包括常见的AssertionError、KeyError、TypeError、ValueError等Python异常
Python 异常机制 06_常见异常汇总和说明.mp4