当前位置 : 主页 > 编程语言 > python >

python中的异常捕获

来源:互联网 收集:自由互联 发布时间:2022-06-24
​ 无论是编程新手还是老手,都会遇到过程序报错,终止执行的情况,对于python的报错信息,可以分为以下两大类 语法错误,syntax error 异常, exception 两类报错信息示意如下 # 语法错误

无论是编程新手还是老手,都会遇到过程序报错,终止执行的情况,对于python的报错信息,可以分为以下两大类

  • 语法错误,syntax error
  • 异常, exception
  • 两类报错信息示意如下

    # 语法错误
    >>> 2 x 2
    File "<stdin>", line 1
    2 x 2
    ^
    SyntaxError: invalid syntax


    # 异常
    # 除数为0的异常
    >>> 2 / 0
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ZeroDivisionError: division by zero
    >>>


    # 变量未定义的异常
    >>> a += 1
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined


    如果对于基础语法不熟悉,就可能编写出语法错误的代码,这种是编程新手常犯的错误,而异常则是因为考虑的不够周全,比如除数为0的异常,可能初次测试时被除数都不为0,开发者就认为代码是ok的,但是当处理的项目多了,某一天处理了一个除数为0的事务时,代码报错了,此时才意识到代码存在bug, 这也是为什么软件开发不能一步到位,而是不断迭代升级的原因,只有当代码处理的项目足够多的,范围足够广,才能够发现现有代码的不足,从而做出改进。

    对于代码中可能的异常进行处理,可以增加程序的健壮性。在python中,通过try..except语句进行异常捕获,基本用法如下

    >>> def calc(a, b):
    ... try:
    ... num = a / b
    ... except ZeroDivisionError:
    ... print('[Warning] {} is zero'.format(b))
    ... num = float('inf') if a >= 0 else float('-inf')
    ... return num
    ...
    >>> calc(2, 1)
    2.0
    >>> calc(2, 0)
    [Warning] 0 is zero
    inf

    try语句的具体原理如下

  • 将可能存在异常的语句放置在try代码块中
  • 用except捕获对应的异常,except语句可以有多条,对应多个不同类型的异常,当try中的某条语句跑出异常之后,程序就会根据异常类型,执行对应的except语句
  • 记住所有的异常类型基本是不可能的,在实际开发中,往往是根据经验,先设定几个可能的异常类型,当遇到超出范围的异常时,在修改代码,捕获对应的异常。

    try语句有两个可选的语句

  • else
  • finally
  • else语句只有当try中的代码没有抛出异常时,才会执行; finally语句在try语句正常执行或者异常被处理之后就会执行,示例如下

    >>> def calc(a, b):
    ... try:
    ... num = a / b
    ... except ZeroDivisionError:
    ... print('[Warning] {} is zero'.format(b))
    ... num = float('inf') if a >= 0 else float('-inf')
    ... except TypeError:
    ... num = float(a) / float(b)
    ... except:
    ... raise
    ... else:
    ... print('{} / {} == {}'.format(a, b, num))
    ... finally:
    ... print('result is {}'.format(num))
    ... return num
    ...
    >>>
    # try语句没有抛出异常,else和finally都执行
    >>> calc(2, 1)
    2 / 1 == 2.0
    result is 2.0
    2.0
    # try语句抛出异常,else语句没有执行,except处理了异常,finally执行
    >>> calc(2, 0)
    [Warning] 0 is zero
    result is inf
    inf
    # try语句抛出异常,else语句没有执行,except处理了异常,finally执行
    >>> calc('2', 1)
    result is 2.0
    2.0
    # try语句抛出异常,但是没有对应的except处理该异常,程序终止,else和finally都没有执行
    >>> calc(a, 1)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined


    在实际开发中,初次编码只需要针对已知的异常类型进行处理即可,后续再根据遇到的报错调整代码。

    ·end·

    —如果喜欢,快分享给你的朋友们吧—




    关注我们,解锁更多精彩内容!


    python中的异常捕获_异常类型




    上一篇:python代码规范
    下一篇:没有了
    网友评论