hwl198212 发表于 2017-4-27 11:57:04

python 异常处理 (转)

  一)捕获异常
  格式一:
  try:
  <语句>
  except <异常1>:
  <语句>
  except <异常2>:
  <语句>
  else:           如果没有异常,则执行else块中的语句
  <语句>
  格式二:
  try:
  <语句>
  finally:
  <语句>
  不管try语句块中是否发生异常,都将执行finally语句块。
view plaincopy


[*]>>> l =   
[*]>>> l  
[*]Traceback (most recent call last):  
[*]  File "<stdin>", line 1, in <module>  
[*]IndexError: list index out of range  
[*]>>> try:  
[*]...     l  
[*]...     except:   #此处未使用异常名,表示捕获所有异常  
[*]  File "<stdin>", line 3  
[*]    except:   #此处未使用异常名,表示捕获所有异常  
[*]         ^  
[*]SyntaxError: invalid syntax  
[*]>>> try:  
[*]...     l  
[*]... except:    #此处未使用异常名,表示捕获所有异常  
[*]...     print 'Error'  
[*]... else:  
[*]...     print 'No error'  
[*]...  
[*]Error  
[*]>>> try:  
[*]...     l  
[*]... except:  
[*]...     print 'error'  
[*]... else:  
[*]...     print 'No error'  
[*]...  
[*]3  
[*]No error  
[*]>>> try:  
[*]...     l  
[*]... finally:  
[*]...     print 'a'  
[*]...  
[*]3  
[*]a  
[*]>>> try:  
[*]...     l  
[*]... finally:  
[*]...     print 'a'  
[*]...  
[*]a  
[*]Traceback (most recent call last):  
[*]  File "<stdin>", line 2, in <module>  
[*]IndexError: list index out of range  
[*]>>>  

  二)处理异常:
  AttributeError: 调用不存在的方法引发的异常
  EOFError: 遇到文件末尾引发的异常
  ImportError: 导入模块出错引发的异常
  IndexError: 列表越界引发的异常
  IOError: I/O 操作引发的异常,如打开文件出错等
  KeyError:使用字典中不存在的关键字引发的异常
  NameError:使用不存在的变量名引发的异常
  TabError: 语句块缩进不正确引发的异常
  ValueError: 搜索列表中不存在的值引发的异常
  ZeroDivisionError: 除数为零引发的异常
  except语句主要有以下几种用法:
  except:      捕获所有异常
  except  <异常名>:
  except  <异常名1,异常名2>:  捕获异常名1或者异常名2
  except  <异常名>, <数据>: 捕获指定异常及附加的数据
  except  (异常名1,异常名2), <数据>:  捕获异常名1或者异常名2及异常的附加数据
view plaincopy


[*]>>> l =   
[*]>>> try:  
[*]    l  
[*]except IndexError,Error  
[*]SyntaxError: invalid syntax  
[*]>>> l =   
[*]>>> try:  
[*]    l  
[*]except IndexError,errorMessage:  
[*]    print errorMessage  
[*]else:  
[*]    print 'No Error'  
[*]  
[*]      
[*]list index out of range  
[*]>>> try:  
[*]    l/0  
[*]except (IndexError,ZeroDivisionError): #捕获IndexError异常或者ZeroDivisionError异常  
[*]    print 'Error'  
[*]else:  
[*]    print 'No error'  
[*]  
[*]      
[*]Error  
[*]>>> try:  
[*]    l / 0  
[*]except:  
[*]    print 'Error'  
[*]else:  
[*]    print 'No error'  
[*]  
[*]      
[*]Error  
[*]>>> try:  
[*]    l/0  
[*]except (IndexError,ZeroDivisionError),value:   #捕获IndexError或ZeroDivisionError异常,及其附加数据  
[*]    print value  
[*]  
[*]      
[*]integer division or modulo by zero  
[*]>>>   

  3)多重异常处理
  如果except能够处理该异常,则外围的try语句将不会捕获异常。如果except忽略该异常,则异常将被外围try语句捕获。
view plaincopy


[*]>>> try:  
[*]...     try:  
[*]...             l  
[*]...     except:  
[*]...             print 'error1'  
[*]... except:  
[*]...     print 'error2'  
[*]... else:  
[*]...     print 'no error'  
[*]...  
[*]error1  
[*]no error  
[*]>>> try:  
[*]...     try:  
[*]...             l/0  
[*]...     except IndexError:  
[*]...             print 'error1'  
[*]... except:  
[*]...     print 'error2'  
[*]... else:  
[*]...     print 'no error'  
[*]...  
[*]error2  
[*]>>> try:  
[*]...     try:  
[*]...             l/'s'  
[*]...     except IndexError:  
[*]...             print 'error1'  
[*]... except ZeroDivisionError:  
[*]...     print 'error2'  
[*]... else:  
[*]...     print 'no error'  
[*]...  
[*]Traceback (most recent call last):  
[*]  File "<stdin>", line 3, in <module>  
[*]TypeError: unsupported operand type(s) for /: 'int' and 'str'  
[*]>>>  

  二)引发异常:
  在python中可以通过使用raise语句手工引发异常。在类中也可以使用raise引发异常,并向异常传递数据。使用raise可以定义新的错误类型,以适应脚本的需要。
view plaincopy


[*]>>> class A:  
[*]    def show(self):  
[*]        print 'A'  
[*]  
[*]          
[*]>>> try:  
[*]    raise A  
[*]except A:  
[*]    print 'error'  
[*]else:  
[*]    print 'No error'  
[*]  
[*]      
[*]error  
[*]>>>   

  自定义异常类:
view plaincopy


[*]>>> class MyError(Exception):  
[*]    def __init__(self,data):     #重载__init__方法  
[*]        self.data = data  
[*]    def __str__(self):  
[*]        return self.data     #重载__str__方法  
[*]  
[*]      
[*]>>> raise MyError,'error'  
[*]  
[*]Traceback (most recent call last):  
[*]  File "<pyshell#110>", line 1, in <module>  
[*]    raise MyError,'error'  
[*]MyError: error  
[*]>>> try:  
[*]    raise MyError,'raise MyError'  
[*]except MyError,data:  
[*]    print data  
[*]else:  
[*]    print 'no error'  
[*]  
[*]      
[*]raise MyError  
[*]>>>  
  原文章地址:http://blog.csdn.net/guopengzhang/article/details/5455341 

 
页: [1]
查看完整版本: python 异常处理 (转)