简明Python教程 --- 13.异常处理
当你的程序中出现某些异常的状况的时候,异常就发生了。例如,要读某个文件,而那个文件不存在。或者在程序运行的时候,不小心把它删除了。上述这些情况可以使用异常来处理。
错误
考虑一条简单的print语句:print "hello"。假如你把print写成了pring。那么就会引发一个错误:
>>> python pring "hello";
File "<stdin>", line 1
python pring "hello";
^
SyntaxError: invalid syntax
>>>
从上面的输出可以看到,错误的信息被详细地打印出来了,输出错误信息是由错误处理器来完成的。
try...except
处理异常使用try...except语句。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。
import sys;
try :
s = raw_input('please input a integer : ');
num = int(s);
print num;
except EOFError :
print u"不是吧?直接一点东西都不输入?";
except :
print u"输入有误";
print u"执行完毕。";
注意,try...except语句的后面可以加一个else从句,这个else从句在没有异常发生时被调用。
引发异常
使用raise语句引发异常。还得指明错误/异常的名称和伴随异常触发的异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。
举例,定义一个异常,然后在程序中抛出该异常。
class StringLengthIsNot6Exception(Exception) :
def __init__(self, s, len) :
Exception.__init__(self)
self.s = s
self.len = len
try :
s = raw_input("Enter a string : ")
if len(s) != 6 :
raise StringLengthIsNot6Exception(s, len(s))
except StringLengthIsNot6Exception, e :
print e.s, " is not length 6, but ", e.len
else :
print "no exception was raised."
try...finally
假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。
try :
f = file("C:/abc.txt");
while True :
line = f.readline();
if len(line) == 0 :
break;
print line;
finally :
f.close();
print u"关闭文件。";