首页 python基础教程 Python异常的捕获和处理(try...except...)
pay pay

Python异常的捕获和处理(try...except...)

日期: 2021年12月1日 20:20
栏目: python基础教程
阅读: 140
作者: python自学网

摘要: 在开发工作中作为开发人员首先要考虑的是预防异常的发生,有些情况是没有办法预防的,只有等异常抛出后想办法解决。

在开发工作中作为开发人员首先要考虑的是预防异常的发生,有些情况是没有办法预防的,只有等异常抛出后想办法解决。

1.预防异常的发生

def test1(m, n):
    print(m / n)
test1(3, 2)
# test(3, 0)  # 这时候会发生除零错误,可以欧诺个过预防来解决
def test2(m, n):
    if n != 0:
        print(m / n)
    print('除数不能为零!')
test2(3, 0)

2.解决异常

lis = iter([1, 2, 3])  # 无法确定迭代的次数
try:
    print(next(lis))
    print(next(lis))
    print(next(lis))
    print(next(lis))
except StopIteration:
    print('迭代已经完毕')
# 想要解决异常,我们就需要对异常的类型进行捕捉和处理

3.try...except...的详细用法

'''这种语句类似于我们之前学习的多分支判断语句
try:
    # 有可能出现异常的代码
except NameError as ze:  # 这里可以加入形参,返回异常描述
    # 出现上述异常时的解决方法,可以写多个except代码块,但是只会出现一个结果
except TypeError as ne:
    # 出现上述异常时的解决方法,可以写多个except代码块,但是只会出现一个结果
except (NameError, TypeError):  # 可以通过元祖合并处理异常
    # 出现上述异常时的解决方法,可以写多个except代码块,但是只会出现一个结果
except Exception:  # 可以直接写一个总的异常类来解决不确定的错误
    # 出现上述异常时的解决方法,可以写多个except代码块,但是只会出现一个结果
else:
    # 走另一个分支,一般是上面异常均未捕获的情况下才走else
finally:
    # 无论如何都会执行的代码
'''
age = 18
try:
    print(age)
except NameError:
    print('变量名未定义')
else:
    print('未捕获到任何异常')
finally:
    print('+++++++++++')

注意:异常的捕获是阻断的,一旦发现异常直接抛出第一个异常,后面代码出现异常不会被抛出。

int1 = input('请输入一个数字:')
try:
    # print(age)  # 错误一
    # 1 / 0  # 错误二
    # lis = iter([1, 2, 3])  # 错误三
    # print(next(lis))
    # print(next(lis))
    # print(next(lis))
    # print(next(lis))
    print(int1 + 10)  # 错误四
except NameError:
    print('变量名未定义')
except ZeroDivisionError as zde:  # 定义异常名称
    print('除零错误', zde)  # 除零错误 division by zero
except (StopIteration, TypeError):  # 同时抛出两个异常,但是并不是表示检测到两个异常,注释迭代器之后还会返回一样的结果
    print('迭代错误,类型错误')
except Exception:  # Exception是上面异常的父类
    print('异常不确定')
else:
    print('未捕获到任何异常')
finally:
    print('+++++++++++')

 

回顶部