`
songzhan
  • 浏览: 240211 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

python 异常处理 (转)

阅读更多

一)捕获异常

格式一:

try:

    <语句>

except <异常1>:

    <语句>

except <异常2>:

    <语句>

else:           如果没有异常,则执行else块中的语句

    <语句>

格式二:

try:

    <语句>

finally:

    <语句>

不管try语句块中是否发生异常,都将执行finally语句块。

[python] view plaincopy
  1. >>> l = [1,2,3]  
  2. >>> l[5]  
  3. Traceback (most recent call last):  
  4.   File "<stdin>", line 1in <module>  
  5. IndexError: list index out of range  
  6. >>> try:  
  7. ...     l[5]  
  8. ...     except:   #此处未使用异常名,表示捕获所有异常  
  9.   File "<stdin>", line 3  
  10.     except:   #此处未使用异常名,表示捕获所有异常  
  11.          ^  
  12. SyntaxError: invalid syntax  
  13. >>> try:  
  14. ...     l[5]  
  15. ... except:    #此处未使用异常名,表示捕获所有异常  
  16. ...     print 'Error'  
  17. ... else:  
  18. ...     print 'No error'  
  19. ...  
  20. Error  
  21. >>> try:  
  22. ...     l[2]  
  23. ... except:  
  24. ...     print 'error'  
  25. ... else:  
  26. ...     print 'No error'  
  27. ...  
  28. 3  
  29. No error  
  30. >>> try:  
  31. ...     l[2]  
  32. ... finally:  
  33. ...     print 'a'  
  34. ...  
  35. 3  
  36. a  
  37. >>> try:  
  38. ...     l[5]  
  39. ... finally:  
  40. ...     print 'a'  
  41. ...  
  42. a  
  43. Traceback (most recent call last):  
  44.   File "<stdin>", line 2in <module>  
  45. IndexError: list index out of range  
  46. >>>  

 

二)处理异常:

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及异常的附加数据

[python] view plaincopy
  1. >>> l = [1,2,]  
  2. >>> try:  
  3.     l[5]  
  4. except IndexError,Error  
  5. SyntaxError: invalid syntax  
  6. >>> l = [1,2,3]  
  7. >>> try:  
  8.     l[5]  
  9. except IndexError,errorMessage:  
  10.     print errorMessage  
  11. else:  
  12.     print 'No Error'  
  13.   
  14.       
  15. list index out of range  
  16. >>> try:  
  17.     l[2]/0  
  18. except (IndexError,ZeroDivisionError): #捕获IndexError异常或者ZeroDivisionError异常  
  19.     print 'Error'  
  20. else:  
  21.     print 'No error'  
  22.   
  23.       
  24. Error  
  25. >>> try:  
  26.     l[5] / 0  
  27. except:  
  28.     print 'Error'  
  29. else:  
  30.     print 'No error'  
  31.   
  32.       
  33. Error  
  34. >>> try:  
  35.     l[2]/0  
  36. except (IndexError,ZeroDivisionError),value:   #捕获IndexError或ZeroDivisionError异常,及其附加数据  
  37.     print value  
  38.   
  39.       
  40. integer division or modulo by zero  
  41. >>>   

 

3)多重异常处理

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

[c-sharp] view plaincopy
  1. >>> try:  
  2. ...     try:  
  3. ...             l[5]  
  4. ...     except:  
  5. ...             print 'error1'  
  6. ... except:  
  7. ...     print 'error2'  
  8. ... else:  
  9. ...     print 'no error'  
  10. ...  
  11. error1  
  12. no error  
  13. >>> try:  
  14. ...     try:  
  15. ...             l[1]/0  
  16. ...     except IndexError:  
  17. ...             print 'error1'  
  18. ... except:  
  19. ...     print 'error2'  
  20. ... else:  
  21. ...     print 'no error'  
  22. ...  
  23. error2  
  24. >>> try:  
  25. ...     try:  
  26. ...             l[1]/'s'  
  27. ...     except IndexError:  
  28. ...             print 'error1'  
  29. ... except ZeroDivisionError:  
  30. ...     print 'error2'  
  31. ... else:  
  32. ...     print 'no error'  
  33. ...  
  34. Traceback (most recent call last):  
  35.   File "<stdin>", line 3, in <module>  
  36. TypeError: unsupported operand type(s) for /: 'int' and 'str'  
  37. >>>  

 

二)引发异常:

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

 

[python] view plaincopy
  1. >>> class A:  
  2.     def show(self):  
  3.         print 'A'  
  4.   
  5.           
  6. >>> try:  
  7.     raise A  
  8. except A:  
  9.     print 'error'  
  10. else:  
  11.     print 'No error'  
  12.   
  13.       
  14. error  
  15. >>>   

 

自定义异常类:

[python] view plaincopy
  1. >>> class MyError(Exception):  
  2.     def __init__(self,data):     #重载__init__方法  
  3.         self.data = data  
  4.     def __str__(self):  
  5.         return self.data     #重载__str__方法  
  6.   
  7.       
  8. >>> raise MyError,'error'  
  9.   
  10. Traceback (most recent call last):  
  11.   File "<pyshell#110>", line 1in <module>  
  12.     raise MyError,'error'  
  13. MyError: error  
  14. >>> try:  
  15.     raise MyError,'raise MyError'  
  16. except MyError,data:  
  17.     print data  
  18. else:  
  19.     print 'no error'  
  20.   
  21.       
  22. raise MyError  
  23. >>>  

 

原文章地址:http://blog.csdn.net/guopengzhang/article/details/5455341 

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics