Python异常

error

程序在执行过程中不可能一直一帆风顺,可能是由于程序员的疏忽出现程序设计问题或者是使用者没有按照规范执行程序,当发生异常的时候程序会停止执行并抛出异常,在控制台自动打印出异常信息。或者通过异常捕获机制捕获异常让程序继续执行下去,Python提供了try···except···else···finally···的错误处理机制,else中的内容是当try成功执行(无异常)时奖励执行的,而finally是无论如何都会执行的,但这两者都不是必要结构,该结构可以嵌套构建。
except后面没有加异常类型信息的时候就是对任何异常都进行捕获并处理,而有时需要针对不同的异常执行下一步操作,这时候可以设定异常类型并且设置多个except依次拦截。在Python中异常也是对象也存在有子父间关系,当异常抛出时需要有对应的exception类型来捕获,否则会持续向上抛出到调用函数,看看调用函数是否有相应的exception来捕获,到最后都没有的话依旧会导致程序停止,在控制台打印出信息。BaseException是所有异常类型的父类,所以except不指定异常信息等价于指定BaseException类型,对所有的异常均可以捕获。


异常类型的关系
def foo(s):
    n = int(s)
    try:
        if n == 0:
            raise ValueError('invalid value: %s' % s)
    except KeyError:
            print('KeyError!')
    return 10 / n

def bar():
    try:
        foo('0')
    except ValueError:
        print('ValueError!')

bar()

logging模块的exception方法可以打印出异常信息。

import logging
def foo(s):
    n = int(s)
    try:
        if n == 0:
            raise ValueError('invalid value: %s' % s)
    except KeyError:
            print('KeyError!')
    except BaseException as e:
        print("终极拦截")
        logging.exception(e)
        print("继续执行")
    return 10

def bar():
    try:
        foo('0')
    except ValueError:
        print('ValueError!')

bar()

结果为:

终极拦截
>ERROR:root:invalid value: 0
>Traceback (most recent call last):
    File "<ipython-input-26-32c1733ed41b>", line 6, in foo
      raise ValueError('invalid value: %s' % s)
  ValueError: invalid value: 0
>继续执行
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需...
    有可能_666阅读 560评论 0 0
  • 转载自:JmilkFan_范桂飓:http://blog.csdn.net/jmilk 异常 异常即非正常状态,在...
    ccq_inori阅读 3,738评论 0 1
  • 相关什么是异常?异常就是“不正常”。我们的程序的执行过程中发生了一个不正常的事件,这个事件影响了程序的正常运行,此...
    我爱Python阅读 1,377评论 0 0
  • 异常 try & except 块 一旦 try 块中的内容出现了异常,那么 try 块后面的内容会被忽略,Pyt...
    Yuri7阅读 231评论 0 0
  • 捕获多个异常 当一个代码片段可能会抛出多个异常时,可以将异常类型放入一个元组中(必须是元组(),数组[]没有效果)...
    XuguangYan阅读 633评论 0 0