什么是异常?
Python 用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误信息)终止执行。
常见异常类型
①AssertionError assert 语句失败
②AttributeError 试图访问一个对象没有属性
③IOError 输入输出异常,试图打一个不存的文件(包括其它情况)时引起
④NameError 使用一个还未赋值对象的变量
⑤IndexError 在使用序列中不存在的所引进引发
⑥IndentationError 语法错误,代码没有正确的对齐
⑦KeyboardInterrupt Ctrl+C 被按下,程序被强行终止
⑧TypeError 传入的对象类型与要求不符
⑨SyntaxError Python 代码逻辑语法出错,不能执行
BaseException与Exception
①BaseException 新的所有异常类的基类,可以接受一切异常
②Exception 所有异常类的基类,可以接受一切异常,但继承 BaseException 类
异常在程序的处理
①普通应用
try:
open("abc.txt",'r')
print aa
except BaseException,msg:
print msg
② try…except 与 else 配合使用
try:
aa = '异常测试'
print aa
except Exception,msg:
print msg
else:
print '没有异常!' 打印结果:
else 语句只有在没有异常的情况下才会被执行,有异常执行的是异常下的语句\
③Try…finally
try:
for l in strs:
print l
time.sleep(1)
finally:
files.close()
print 'Cleaning up ...closed the file'
不管这个程序是否存在异常都会执行finally下的语句与else存在很大的区别
生成异常
这个程序的运行是不会产生异常的,但是我们需要异常,所以我们采用raise生成一个异常
filename = raw_input('please input file name:')
if filename=='hello':
raise NameError('input file name error !')
运行结果:
please input file name:hello
Traceback (most recent call last):
File “F:\project\count.py”, line 5, in
raise IOError(‘input file name error !’)
NameError: input file name error !
运行程序,要求用户输入文件名,通过用户输入的为“hello”,那么将抛出一个 NameError。其实用
户输入什么样的信息与 NameError 之间没有什么关系。但我们可以使用 raise 自定义一些异常信息,这看上去比 print 更专业。需要注意的是 raise 只能使用 Python 中所提供的异常类,如果你自定义了一个 abcError可不起作用。