• python 异常处理


    Python顶层处理器默认对异常的处理方式是:1.捕捉异常 2.打印异常 3.程序退出

    异常处理的语句格式:1.捕捉异常 2.打印异常 3.程序正常执行

      

    try:

             raise xxx

             ………

    except:

             ………

    else:

             ………

    finally:

             ………

    try...except...用于捕捉发生的错误

    else 如果try中没有发生异常,将会执行else语句

    finally 在程序返回前执行,无论有没有异常,它总是会被执行

    return 如果finally中有return语句,则执行finally中的return语句返回;

    如果finally中没有return语句,则返回到转入finally之前的代码段中返回。

    处理过程:

    Start

    Error: integer division or modulo by zero

    Try End

    Big End

    1.自定义异常类 FooError,该异常类继承与ValueError

    2.使用raise抛出异常FooError

    3.处理过程

    raise error

    (因为没有使用try except,所以执行10/n会报错)

    4.最终没有打印到End

    混合双打

    处理过程:

    在bar()函数中,我们明明已经捕获了错误,

    但是,打印一个Big Problem!后,又把错误通过raise语句抛出去了,这不有病么?

    语法嵌套

    1.使用了两次try...except...

    处理过程:

    运行结果思考:

    这种错误处理方式不但没病,而且相当常见。捕获错误目的只是记录一下,便于后续追踪。

    但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理。

    好比一个员工处理不了一个问题时,就把问题抛给他的老板,如果他的老板也处理不了,就一直往上抛,最终会抛给CEO去处理。

    知识点:

    raise语句如果不带参数,就会把当前错误原样抛出

    知识点1:

    可以有多个except来捕获不同类型的错误

    知识点2:

    Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:

    https://docs.python.org/3/library/exceptions.html#exception-hierarchy

    打印错误信息:

    知识点:

    str(e)和e.message一样返回字符串类型,只给出异常信息,不包括异常信息的类型

    repr(e)给出较全的异常信息,包括异常信息的类型

    traceback获取的信息最全,与python命令行运行程序出现错误信息一致

    sys.exc_info返回三个值,异常类型,引发的实例,traceback对象

    import traceback

    结果:

    函数信号条件和raise

    知识点:

    用户定义异常引发非错误

    异常提供一种方式传达结果信号,不用返回值

    可用于任何无返回警示值以表明成功或者失败的函数

    常用方式

    知识点:

    采用Exception 覆盖全部类型

    可采用repr打印出出错类型

    有返回值的函数,有错没错都要有默认返回值

    结果:

    练习1

    执行过程:

    ValueError: invalid literal for int() with base 10: 'a'

    返回值是2

    练习2

    执行过程:

    ValueError: invalid literal for int() with base 10: 'a'

    finally...

    返回值是1

    知识点是:如果finally中有return语句,则执行finally中的return语句返回;

    如果finally中没有return语句,则返回到转入finally之前的代码段中返回。

    练习3

    def foo():

    try:

    r=10/int('a')

    except ValueError as e:

    print('ValueError:',e)

    return 2

    finally:

    print('finally...')

    return 0

    print foo()

    执行过程:

    ValueError: invalid literal for int() with base 10: 'a'

    finally...

    返回值是2

    练习4

    def foo():

    try:

    r=10/int('1')

    except ValueError as e:

    print('ValueError:',e)

    return 2

    else:

    print('else...')

    return 3

    finally:

    print('finally...')

    print foo()

    执行过程:

    没有异常,执行else语句

    else...

    finally...

    返回值是3

  • 相关阅读:
    ThinkPHP框架知识(比较全的知识)
    利用smarty模板(登录、有关信息操作等功能)
    从零开始学习Node.js例子七 发送HTTP客户端请求并显示响应结果
    从零开始学习Node.js例子六 EventEmitter发送和接收事件
    从零开始学习Node.js例子五 服务器监听
    从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)
    从零开始学习Node.js例子四 多页面实现数学运算 续一(使用connect和express框架)
    从零开始学习Node.js例子四 多页面实现数学运算
    从零开始学习Node.js例子三 图片上传和显示
    从零开始学习Node.js例子二 文本提交与显示
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12068752.html
Copyright © 2020-2023  润新知