《Beginning Python From Novice to Professional》学习笔记十:Exception
来源:互联网 发布:淘宝卖家入口在哪 编辑:程序博客网 时间:2024/04/20 10:47
0.最重要的内置异常
Exception:所有异常的基类
AttributeError:属性引用或赋值异常
IOError:试图读、写不存在的文件
IndexError:使用Sequence中不存在的Index
KeyError:使用Mapping中不存在的Key
NameError:变量名未找到
SyntaxError:语法错
TypeError:在内置函数中使用错误的类型
ValueError:类型对,但值不正确
ZeroDivisionError:除零
1.自定义异常
class SomeCustomException(Exception): pass
2.捕获异常
#适合于人机交互
3.无参数raise重新抛出异常reraises
#适合于程序间交互
#注意在除以零且muffled不为零的情况下,程序的返回值为None
4.多Exception分支
5.在一句中同时捕获多个Exception
6.同时捕获多个,而且能甄别具体是哪个
7.捕获一切异常
但这种捕获方式比较危险,因为它会忽略程序中你未曾想到的错误,同时也不能针对错误来处理,因此尽量采用以下形式来捕获所有异常:
8.When All Is Well
不知咋翻,多用于输入时,不断提示输入直到一切就绪
9.finally
在出现可能的异常之后做一些清理工作
结果为:--->
Cleaning up...
Traceback (most recent call last):
File "C:/python/div.py", line 4, in ?
x = 1/0
ZeroDivisionError: integer division or modulo by zero
也可以加上except:
结果为: --->
integer division or modulo by zero
Cleaning up...
10.异常跟踪
如果一个异常在函数A内部被引发,但没有被处理,它将被传递给调用它的函数B,如果在B处又未处理,它将继续上溯传递,直到全局域内的函数G,如果在G中仍未被处理,整个程序将halt并显示错误信息(a stack trace):
ignore_exception() --->
Traceback (most recent call last):
File '<stdin>', line 1, in ?
File '<stdin>', line 2, in ignore_exception
File '<stdin>', line 2, in faulty
Exception: Something is wrong
handle_exception() --->
Exception handled #只要在任何一处被处理了,则整个程序不被因为此Exception而Halt。
11.The Zen of Exceptions - Exception哲理
比较下面两段代码:
其中第一段会查找Key “occupation”两次,一次判断,一次取值;而第二段代码则只要一次。
但在大多数情况下,用try/exception还是if/else只是个人喜好的不同(a matter of taste)。对性能的影响不大,而且编程时对性能的考虑是第二位的。
The point is that using a try/except statement is in many cases much more natural (more “Pythonic”) than if/else。应该尽量使用它。
最后引用Grace Hopper's words of wisdom, “It’s easier to ask forgiveness than permission.”
这种策略叫Leap Before You Look idiom.
- 《Beginning Python From Novice to Professional》学习笔记十:Exception
- 《Beginning Python From Novice to Professional》学习笔记一:String
- 《Beginning Python From Novice to Professional》学习笔记二:Sequence
- 《Beginning Python From Novice to Professional》学习笔记三:List
- 《Beginning Python From Novice to Professional》学习笔记四:Tuple
- 《Beginning Python From Novice to Professional》学习笔记六:Dictionary
- 《Beginning Python From Novice to Professional》学习笔记七:Statement
- 《Beginning Python From Novice to Professional》学习笔记八:Abstraction
- 《Beginning Python From Novice to Professional》学习笔记十一:__Magic__
- 《Beginning Python From Novice to Professional》学习笔记十二:__Magic__
- Beginning Python: From Novice to Professional
- 《Beginning Python From Novice to Professional》学习笔记五:Advanced String
- 《Beginning Python From Novice to Professional》学习笔记九:More Abstraction
- Beginning Python From Novice to Professional (3) - 列表操作
- Beginning Python From Novice to Professional (6) - 函数使用
- Beginning Python From Novice to Professional (7) - 类
- Beginning Python From Novice to Professional (8) - 文件方法
- Beginning Python From Novice to Professional (9) - Socket
- WCDMA与CDMA2000网络结构比较
- DIV+CSS不适合中国中小型网站
- XML实例入门笔记(01) - 序
- 嵌入式C语言编程要点
- 解决asp.net 连接access中的相对路径问题
- 《Beginning Python From Novice to Professional》学习笔记十:Exception
- Ubuntu清理系统
- Date类型,存入数据库
- WiMAX组网技术与解决方案
- 写好C语言的头文件
- C语言中使用函数指针构造回调函数的一个典型应用
- 堆和栈(转)
- C实现内存拷贝以及字符串拷贝函数
- 移动设备管理(MDM)与OMA(OTA)DM协议向导(三)——AAA服务器