简明Python教程 --- 13.异常处理

来源:互联网 发布:电炖盅 知乎 编辑:程序博客网 时间:2024/04/30 04:04

简明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"关闭文件。";