066_如何捕获多个异常_try_否则_else_exception0 播放 · 0 赞同视频
如何捕获多个异常_try_否则_else_exception 回忆上次内容
-
上次学习了
-
try
-
except
-
try着 尝试着 运行
-
一旦发现了 错误
-
就 终止 try中的执行
-
直接跳转到
-
except块
添加图片注释,不超过 140 字(可选)
-
注意要点
-
半角冒号
-
缩进
-
错误信息输出
-
有错 就报
-
不要 忽略、隐瞒
-
否则 找不到 出错位置
-
究竟 应该如何理解
-
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 字(可选)
-
错误类型太多了
-
有 通用错误类型 吗?
-
能兜住 所有错误 那种?