首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 错误处理 (转)

2014-01-22 
python 异常处理 (转)一)捕获异常格式一:try:??? 语句except 异常1:??? 语句except 异常2:??? 语

python 异常处理 (转)

一)捕获异常

格式一:

try:

??? <语句>

except <异常1>:

??? <语句>

except <异常2>:

??? <语句>

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

??? <语句>

格式二:

try:

??? <语句>

finally:

??? <语句>

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

[python] view plaincopy
  1. >>>?l?=?[1,2,3]??>>>?l[5]??
  2. Traceback?(most?recent?call?last):????File?"<stdin>",?line?1,?in?<module>??
  3. IndexError:?list?index?out?of?range??>>>?try:??
  4. ...?????l[5]??...?????except:???#此处未使用异常名,表示捕获所有异常??
  5. ??File?"<stdin>",?line?3??????except:???#此处未使用异常名,表示捕获所有异常??
  6. ?????????^??SyntaxError:?invalid?syntax??
  7. >>>?try:??...?????l[5]??
  8. ...?except:????#此处未使用异常名,表示捕获所有异常??...?????print?'Error'??
  9. ...?else:??...?????print?'No?error'??
  10. ...??Error??
  11. >>>?try:??...?????l[2]??
  12. ...?except:??...?????print?'error'??
  13. ...?else:??...?????print?'No?error'??
  14. ...??3??
  15. No?error??>>>?try:??
  16. ...?????l[2]??...?finally:??
  17. ...?????print?'a'??...??
  18. 3??a??
  19. >>>?try:??...?????l[5]??
  20. ...?finally:??...?????print?'a'??
  21. ...??a??
  22. Traceback?(most?recent?call?last):????File?"<stdin>",?line?2,?in?<module>??
  23. 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及异常的附加数据

[python] view plaincopy
  1. >>>?l?=?[1,2,]??>>>?try:??
  2. ????l[5]??except?IndexError,Error??
  3. SyntaxError:?invalid?syntax??>>>?l?=?[1,2,3]??
  4. >>>?try:??????l[5]??
  5. except?IndexError,errorMessage:??????print?errorMessage??
  6. else:??????print?'No?Error'??
  7. ????????
  8. list?index?out?of?range??>>>?try:??
  9. ????l[2]/0??except?(IndexError,ZeroDivisionError):?#捕获IndexError异常或者ZeroDivisionError异常??
  10. ????print?'Error'??else:??
  11. ????print?'No?error'????
  12. ??????Error??
  13. >>>?try:??????l[5]?/?0??
  14. except:??????print?'Error'??
  15. else:??????print?'No?error'??
  16. ????????
  17. Error??>>>?try:??
  18. ????l[2]/0??except?(IndexError,ZeroDivisionError),value:???#捕获IndexError或ZeroDivisionError异常,及其附加数据??
  19. ????print?value????
  20. ??????integer?division?or?modulo?by?zero??
  21. >>>???

?

3)多重异常处理

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

[c-sharp] view plaincopy
  1. >>>?try:??...?????try:??
  2. ...?????????????l[5]??...?????except:??
  3. ...?????????????print?'error1'??...?except:??
  4. ...?????print?'error2'??...?else:??
  5. ...?????print?'no?error'??...??
  6. error1??no?error??
  7. >>>?try:??...?????try:??
  8. ...?????????????l[1]/0??...?????except?IndexError:??
  9. ...?????????????print?'error1'??...?except:??
  10. ...?????print?'error2'??...?else:??
  11. ...?????print?'no?error'??...??
  12. error2??>>>?try:??
  13. ...?????try:??...?????????????l[1]/'s'??
  14. ...?????except?IndexError:??...?????????????print?'error1'??
  15. ...?except?ZeroDivisionError:??...?????print?'error2'??
  16. ...?else:??...?????print?'no?error'??
  17. ...??Traceback?(most?recent?call?last):??
  18. ??File?"<stdin>",?line?3,?in?<module>??TypeError:?unsupported?operand?type(s)?for?/:?'int'?and?'str'??
  19. >>>??

?

二)引发异常:

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

?

[python] view plaincopy
  1. >>>?class?A:??????def?show(self):??
  2. ????????print?'A'????
  3. ??????????>>>?try:??
  4. ????raise?A??except?A:??
  5. ????print?'error'??else:??
  6. ????print?'No?error'????
  7. ??????error??
  8. >>>???

?

自定义异常类:

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

?

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

?

热点排行