以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话
2013-7-26 19:00 学习笔记
1,Python中的异常起着错误处理、事件通知、特殊情况处理、终止行为、非常规流程控制等作用。用法如下:
x = [1,2,3]
try:
print x[3]
except IndexError:
print 'IndexError'
print 'end...'
运行结果如下:
IndexError
end...
try语句中也可以包括finally代码块,finally中的代码无论是否发生异常都会执行。例如:
x = [1,2,3]
try:
print x[3]
except IndexError:
print 'IndexError'
finally:
print 'finally...'
print 'end...'
运行结果为:
IndexError
finally...
end...
2,try语句中可以有多个except,同时可以有else,当没有异常时会执行else中的语句。从Python2.5开始,except、else、finally可以同时出现。例如:
x = [1,2,3]
try:
print x[2]
except IndexError:
print 'IndexError'
else:
print 'NoError'
finally:
print 'finally...'
print 'end...'
输出结果为:
3
NoError
finally...
end...
3,try没有捕捉到的异常会向上传递到Python进程的顶层,并执行Python默认异常处理逻辑(即Python将终止执行程序,并打印标准错误信息)。
4,try语句是可以嵌套的。
5,raise语句用于手动抛出异常,可以是内置异常,也可以是自定义异常。Python使用类自定义异常。例如:
class MyException:
pass
try:
raise MyException
except MyException:
print 'Error1'
输出结果为:
Error1
6,assert语句功能与raise类似。当assert测试的值为假时,Python就会引发异常。例如:
try:
x = 1
assert x==0
except AssertionError:
print 'AssertionError'
输出结果为:
AssertionError
7,with/as环境管理器可以作为try/finally的替代方案,无论是否发生异常,都将执行中止程序代码。
8,用户自定义的异常类最好是继承自Exception内置异常(但不是必须的)。StandardError是Python所有内置异常的超类。因此实际编程中,可以先捕获StandardErro异常,再捕获用户自定义异常。例如:
class MyException(Exception):
pass
try:
print x
except StandardError:
print 'StandardError'
except MyException:
print 'MyException'
9,自定义的异常类是可以有构造函数的,raise异常时可以传递数据给构造函数。例如:
class MyException(Exception):
def __init__(self, x, y):
self.X = x
self.Y = y
try:
raise MyException('error x', 'error y')
except StandardError:
print 'StandardError'
except MyException, e:
print 'MyException: ',e.X,e.Y
输出结果为:
MyException: error x error y
10,raise异常时要后跟异常类的实例,即使是跟一个类的名称,也会自动实例化。可以后跟初始化参数。例如:
class MyException(Exception):
def __init__(self, x, y):
self.X = x
self.Y = y
try:
raise MyException, ('error x', 'error y')
except StandardError:
print 'StandardError'
except MyException, e:
print 'MyException: ',e.X,e.Y
结果与上面相同。