[oeasy]python066_如何捕获多个异常_try_否则_else_exception

066_如何捕获多个异常_try_否则_else_exception0 播放 · 0 赞同视频

点击可播放视频

如何捕获多个异常_try_否则_else_exception 回忆上次内容

  • 上次学习了

  • try

  • except

  • try着 尝试着 运行

  • 一旦发现了 错误

  • 就 终止 try中的执行

  • 直接跳转到

  • except块

添加图片注释,不超过 140 字(可选)

  • 注意要点

  1. 半角冒号

  2. 缩进

  3. 错误信息输出

  • 有错 就报

  • 不要 忽略、隐瞒

  • 否则 找不到 出错位置

  • 究竟 应该如何理解

  • try...except...呢?🤔

查询帮助 help("try")

  • 细节

添加图片注释,不超过 140 字(可选)

  • try...

  • except...

  • 之后 还可以跟一个

  • else...

先回忆try

添加图片注释,不超过 140 字(可选)

  • 如果try中

  • 发现了异常

  • 就立刻 从发现错误的 位置

  • 跳出来

  • 执行except 部分

后else

  • else 是一个可选(optional)子句

添加图片注释,不超过 140 字(可选)

  • 如果try中

  • 从始至终没有发现异常

  • 在执行完try中的所有内容 之后

  • 运行 else 部分

举个例子

  • 这里的参数"abc"

  • 是无法转化为整型数字的

  • 会抛出ValueError

  • 跳出try子句

try: i = int("abc") except ValueError: print("Exception is found!") else: print("Nothing Wrong")

  • 会进入except子句

  • 输出 发现异常

添加图片注释,不超过 140 字(可选)

  • 然后跳过else子句

  • 那什么时候

  • 进入else子句呢?

例子更新

  • 将int函数的参数

  • 从abc修改为123

try: i = int("123") except ValueError: print("Exception is found!") else: print("Nothing Wrong")

  • 字符串"123"

  • 是 可以转化为整型数字的

  • 整个try部分

  • 都执行完毕

  • 没有抛出任何异常

  • 跳过

  • except子句

  • 直接进入

  • else子句

  • 执行输出 Nothing Wrong!

添加图片注释,不超过 140 字(可选)

  • else的意思是否则

  • 是没发现异常时 才执行的

  • 具体都有 什么类型的 异常呢?

不同类型的error

  • 比如 下图

  • 就是 除数不能为零的 错误

  • ZeroDivisionError

  • 命名惯例 为 帕斯卡(大驼峰)

  • PascalCase Naming Convention

添加图片注释,不超过 140 字(可选)

  • 如果不try

  • 会抛出ZeroDivisionError

  • 如果try了

  • 但没有捕捉这个错误呢?

没捉到 try: i = int("123") j = i / 0 except ValueError: print("Exception is found!") else: print("Nothing Wrong")

  • 有错误

  • 但是 抓的方法不对

添加图片注释,不超过 140 字(可选)

  • 怎么 捕获这个错误?

尝试捕获

  • except 不同的 Error

  • 会 捕获到 不同类型的 错误

  • 进行 不同 方式的 处理

try: i = int("123") j = i / 0 print("this line never excute! ") except ValueError: print(ValueError) except ZeroDivisionError: print(ZeroDivisionError) else: print("Nothing Wrong")

  • 尝试捕获 前两种类型的Error

  • ValueError

  • ZeroDivisionError

添加图片注释,不超过 140 字(可选)

  • 各报各的错

尝试调试

  • 调试当前文件

:w|!pdb3 %

  • 第2行 运行没有毛病

添加图片注释,不超过 140 字(可选)

  • 执行第3句的时候

  • 抛出除数不能为零错误

  • 进行 错误排查

错误判断

  • 根据 错误类型 排查

添加图片注释,不超过 140 字(可选)

  • j = i / 0

  • 错误类型为 除数不能为零

  • ZeroDivisionError

  • 第4行 except ValueError

  • 类型不对

  • 跳过

继续错误判断

  • 第6行 except ZeroDivisionError

  • 类型正确

  • 进入子句

添加图片注释,不超过 140 字(可选)

短路作用

  • 前面的异常处理

  • 会短路后面的异常处理

  • 只处理一次就行了

添加图片注释,不超过 140 字(可选)

  • 为什么 要弄这么多

  • 错误排查 呢?

  • 是 没事找事 吗??

异常处理

  • 异常 随时 可能发生

想要

结果

打开 文件

文件不存在

访问 网址

服务器断网

读写 数据库

服务器关闭

添加图片注释,不超过 140 字(可选)

  • 预测 可能出现的异常

  • 并且 有预案 进行处理

  • 运行时 才能 安稳放心

  • 如果 没有相应的 预案

  • 会如何呢?

没有捕获到指定的错误

  • 上来就找不到a

  • 抛出NameError

try: a i = int("123") j = i / 0 except ValueError: print(ValueError) except ZeroDivisionError: print(ZeroDivisionError) else: print("Nothing Wrong")

  • 给定的两种 Error类型

  • 都处理不了 NameError

  • 遍历了 所有处理方式之后

  • Error 依然 无法处理

兜底

  • 最后 都处理不了

  • 相当于 没处理

  • 把 NameError 上交

  • 抛给系统

  • 告知用户

添加图片注释,不超过 140 字(可选)

  • 有 通用错误类型 吗?

  • 兜住 所有错误 那种?

总结

  • 我们了解了 try 的细节

  • try

  • 尝试运行

  • except

  • 发现异常时运行的代码块

  • else

  • 没有发现异常时运行的代码块

  • 注意!

  • 都要有英文半角的冒号

  • 子句都要通过 4 个字符的缩进控制范围

添加图片注释,不超过 140 字(可选)

  • 错误类型太多了

  • 有 通用错误类型 吗?

  • 能兜住 所有错误 那种?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值