python学习笔记5_异常
1、什么事异常
Python使用异常对象(exception object) 来表示异常情况。遇到错误会发生异常。
如果异常对象未被处理或被捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行。
每个异常都是一些类的(本例中是ZeroDivisionError)实例,这些实例可以被引发,并且可以用很多种方式进行捕捉,使程序捕捉异常并处理异常,从而避免整个程序崩溃。
2.、按自己的方式出错
所有的异常类,都是Exception的子类。
2.1、raise
要引发异常,要么是Exception的子类。或者实例参数调用raise。
返回,没有任何有关错误信息的普通错误。返回,一些有关“hyperdrive overload”的错误信息。
- Exception 所有异常的基类
- AttributeError 特性引用或赋值失败时引发
- IOError 试图打开不存在文件(包括其他情况)时引发
- IndexError 在使用序列中不存在的索引时引发
- KeyError 在使用映射中不存在的键时引发
- NameError 在找不到名字(变量)时引发
- SyntaxError 在代码为错误形式时引发
- TypeError 在内建操作或者函数应用于错误类型的对象时引发
- ValueError 在内建操作或者函数应用于正确类型对象,但是该对象使用不合适的值时引发。
- ZeroDivisionError 在除法或者模除操作的第二个参数为0时引发
自定义异常类
Class SomeCustomException(Exception):pass
3、捕获异常
这个功能可以使用 try/except来实现。
如果捕获了异常,但又想重新引发它(也就是说传递异常),那就可以调用不带参数的raise。
4、多个except子句
因为继承eccept的字异常类有很多,如果只捕获一种错误(上例 捕捉ZeroDivisionError,如果除数为0正常被过捕获,当除数是一个字符串的时候那就回引发TypeError的错误,就被漏掉。),引其他错误将被漏掉。
5、用一个块捕获多个异常
用一块捕获多个类型的异常,可以把异常类型作为元祖列出。
6、捕获对象
希望在except子句中访问异常对象本身,可以使用两个参数。
7、全捕捉
一段代码捕捉所有的异常。可以使用except子句中忽略所有异常类。
隐藏所有的错误是很危险的事情,因为会异常所有程序员想不到的错误。
8、万事大吉----else子句
try:
print('正常代码块 ')
except:
print('当发生异常的时候执行。')
else:
print('这是一个没有任何异常的程序。')
9、最后。。。。。。
最后,是Finally子句。它可以用来在可能的异常后进行清理。
注意在2.5以前的版本中,finally是独立的,不能组合使用,2.5以后的版本可以随意使用了。
10、异常和函数
异常和函数能很自然的一起工作。如果异常在函数内部引发而不被处理,它就会传播至(浮到)调用的地方。,如果在那里也没处理异常,它就会继续传播,一直到达主程序(全局作用域)
如果那里没有异常处理程序,程序会带这堆栈跟踪中止。