Python的学习之旅---开始篇(六)
来源:互联网 发布:金属杆中性笔知乎 编辑:程序博客网 时间:2024/06/06 04:49
什么是异常
Python 用异常对象来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行。
事实上,每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,使得程序可以捉住错误并且对其进行处理,而不是让整个程序失效。
>>> raise ExceptionTraceback (most recent call last): File "<pyshell#75>", line 1, in <module> raise ExceptionException>>> raise Exception('hyperdrive overload')Traceback (most recent call last): File "<pyshell#76>", line 1, in <module> raise Exception('hyperdrive overload')Exception: hyperdrive overload>>>
常见的一些重要的内建异常类:
NameError 在找不到名字(变量)时引发SyntaxError 在代码为错误形式时引发
TypeError 在内建操作或者函数应用于错误类型的对象时引发
ValueError 在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发
ZeroDivisionError 在除法或者模除操作的第二个参数为0时引发
如何创建自己的异常类呢?就像其他类一样,只是要确保从Exception 类继承(不算是间接的或者是直接的,也就是说继承其他的内建异常类也是可以的)。那么编写一个自定义异常基本上就像下面这样:
class SomeCustomException(Exception): Pass
如果捕捉到了异常,但是又想重新引发它(也就是说要传递异常,不进行处理),那么可以调用不带参数的raise(还能在捕捉到异常时显式地提供具体异常。)
用一个块捕捉两个或者以上的异常(捕捉对象):如果要捕捉多个异常,也只需要向except 子句提供一个参数-----一个元组。
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/yexcept (ZeroDivisionError, TypeError),e: print e为了捕捉所有Exception类的异常(也会捕捉其所有子类的异常)。
while true: try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except Exception,e: print e print 'Please try again' else: break
因为使用del语句删除一个变量是非常不负责的清理手段,所以finally子句用于关闭文件或者网络套接字时会非常有用。还可以在同一条语句中组合使用try、except、finally和else(或者其中的三个)
try: 1/0except NameError: print "Unknow variable"else: print "That went well!"finally: print "Cleaning up"异常处理并不是很复杂。如果知道某段代码可能会导致某种异常,而又不希望程序以堆栈跟踪的形式终止,那么就根据需要添加try/except或者try/finally语句(或者他们的组合)进行处理。
以上笔记大致来自《Python基础教程 第二版》
- Python的学习之旅---开始篇(六)
- Python的学习之旅---开始篇
- python的学习之旅---开始篇(二)
- Python的学习之旅---开始篇(五)
- 开始自己的python学习之旅
- 开始Python的学习之路
- 开始我的python学习之路
- python学习笔记之(六)
- Python,学习的开始
- 开始python的学习
- Python学习六之文件
- 学习python之路---python小算法总结(六)
- 雷鸣的游戏人生(六) --- 如何开始学习编程?
- 学习Python (六)
- 开始Python之旅!
- 开始Python之旅!
- 开始Python之旅
- 开始Python之旅
- 游标与存储过程,sql统计示例
- UITextView 实现placeholder的方法
- Record is locked by another user(oracle行锁解锁)
- 99乘法表
- 跨域js投递cookie测试
- Python的学习之旅---开始篇(六)
- 引用webservice 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
- SQL Server数据库存储总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- oracle 快速移动数据和删除重复数据但保留其中一条数据
- Leetcode -- Rotate List
- UVa 11809 - Floating-Point Numbers
- Mvc4.0 ajax的使用总结
- JVM内存模型及垃圾回收算法