美文网首页
python 异常处理

python 异常处理

作者: YYL07 | 来源:发表于2018-01-26 15:57 被阅读0次

捕捉异常可以使用 try/except...else...finally 语句。

1、try原理及示例说明

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

下面来看几个例子:

示例1:
# -*- coding: utf-8 -*-

if __name__ == '__main__':

    for error_key in (0, 1):
        print '======= {} ======='.format(error_key)
        try:
            print 'start'
            if error_key:
                raise ValueError('key error')       # 抛出 ValueError 异常
        except Exception, e:
            print 'catch: ', e      # e 存储异常信息
        else:
            print 'succ'          # try中代码无异常时执行
        finally:
            print 'end\n'        # 无论如何都执行

输出结果:


image.png

注意:else 必须放在 finally 前面。但是这两个可以都没有。

示例2:
# -*- coding: utf-8 -*-

if __name__ == '__main__':
    try:
        print 'start'
    except (ImportError, AttributeError, ImportError), e:
        print u'多个异常做同样处理时'
    except:
        raise IOError       # 其他所有异常都在此捕获,继续向上层级抛出

自定义异常

# -*- coding: utf-8 -*-

class MyException(BaseException):
    def __init__(self, *args, **kwargs):
        print 'welcome my Exception'

if __name__ == '__main__':
    try:
        raise MyException
    except:
        print 'catch'

输出:


image.png

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类(或者BaseException类)通过直接或间接的方式。当然你不继承也不会报错,但是会缺失一些方法。具体可查看源码。

相关文章

网友评论

      本文标题:python 异常处理

      本文链接:https://www.haomeiwen.com/subject/axfwaxtx.html