python 异常处理

2018-01-26  本文已影响0人  YYL07

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

1、try原理及示例说明

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,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类)通过直接或间接的方式。当然你不继承也不会报错,但是会缺失一些方法。具体可查看源码。

上一篇 下一篇

猜你喜欢

热点阅读