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

简介: 本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括:1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理

如何捕获多个异常_try_否则_else_exception

回忆上次内容

  • 上次学习了
  • try
  • except
  • try着  尝试着 运行
  • 一旦发现了 错误
  • 就 终止 try中的执行
  • 直接跳转到
  • except块

  • 注意要点
  1. 半角冒号
  2. 缩进
  3. 错误信息输出
  • 有错 就报
  • 不要 忽略、隐瞒
  • 否则 找不到 出错位置
  • 究竟 应该如何理解
  • try...except...呢?🤔

查询帮助

help("try")

  • 细节

  • try...
  • except...
  • 之后 还可以跟一个
  • else...

先回忆try

  • 如果try中
  • 发现了异常
  • 就立刻 从发现错误的 位置
  • 跳出来
  • 执行except 部分

后else

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

  • 如果try中
  • 从始至终没有发现异常
  • 在执行完try中的所有内容 之后
  • 运行 else 部分

举个例子

  • 这里的参数"abc"
  • 是无法转化为整型数字的
  • 会抛出ValueError
  • 跳出try子句

try:

   i = int("abc")

except ValueError:

   print("Exception is found!")

else:

   print("Nothing Wrong")

  • 进入except子句
  • 输出 发现异常

  • 然后跳过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!

  • else的意思是否则
  • 是没发现异常时 才执行的
  • 具体都有 什么类型的 异常呢?

不同类型的error

  • 比如 下图
  • 就是 除数不能为零的 错误
  • ZeroDivisionError
  • 命名惯例 为 帕斯卡(大驼峰)
  • PascalCase Naming Convention

  • 如果不try
  • 会抛出ZeroDivisionError
  • 如果try了
  • 但没有捕捉这个错误呢?

没捉到

try:

   i = int("123")

   j = i / 0

except ValueError:

   print("Exception is found!")

else:

   print("Nothing Wrong")

  • 有错误
  • 但是 抓的方法不对

  • 怎么 捕获这个错误?

尝试捕获

  • 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

  • 各报各的错

尝试调试

  • 调试当前文件

:w|!pdb3 %

  • 第2行 运行没有毛病

  • 执行第3句的时候
  • 抛出除数不能为零错误
  • 进行 错误排查

错误判断

  • 根据 错误类型 排查

  • j = i / 0
  • 错误类型为 除数不能为零
  • ZeroDivisionError
  • 第4行 except ValueError
  • 类型不对
  • 跳过

继续错误判断

  • 第6行 except ZeroDivisionError
  • 类型正确
  • 进入子句

短路作用

  • 前面的异常处理
  • 会短路后面的异常处理
  • 只处理一次就行了

  • 为什么 要弄这么多
  • 错误排查 呢?
  • 没事找事 吗??

异常处理

  • 异常 随时 可能发生
想要 结果
打开 文件 文件不存在
访问 网址 服务器断网
读写 数据库 服务器关闭

  • 预测 可能出现的异常
  • 并且 有预案 进行处理
  • 运行时 才能 安稳放心
  • 如果 没有相应的 预案
  • 会如何呢?

没有捕获到指定的错误

  • 上来就找不到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 上交
  • 抛给系统
  • 告知用户

  • 通用错误类型 吗?
  • 兜住 所有错误 那种?

总结

  • 我们了解了 try 的细节
  • try
  • 尝试运行
  • except
  • 发现异常时运行的代码块
  • else
  • 没有发现异常时运行的代码块
  • 注意!
  • 都要有英文半角的冒号
  • 子句都要通过 4 个字符的缩进控制范围

  • 错误类型太多了
  • 通用错误类型 吗?
  • 能兜住 所有错误 那种?
相关文章
|
7天前
|
Rust JavaScript 前端开发
[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行
本文探讨了编程语言中的动态类型与静态类型、强类型与弱类型的概念。通过实例分析,如Python允许变量类型动态变化(如`age`从整型变为字符串),而C语言一旦声明变量类型则不可更改,体现了动态与静态类型的差异。此外,文章还对比了强类型(如Python,不允许隐式类型转换)和弱类型(如JavaScript,支持自动类型转换)的特点。最后总结指出,Python属于动态类型、强类型语言,对初学者友好但需注意类型混淆,并预告下期内容及提供学习资源链接。
48 21
|
5天前
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
38 11
|
1天前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
18 1
|
8天前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
23 4
|
14天前
|
Shell Python
[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace
本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括: 1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。 2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。 3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。 4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。
28 8
|
12天前
|
Python
[oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
本文回顾了Python中从模块导入变量和函数的方式,重点讨论了避免本地变量名冲突(local name clashes)的方法。通过`from module import variable as alias`可以为导入的变量重命名,防止冲突。根据PEP8规范,建议避免使用`from module import *`,因为它会导入模块中所有非下划线开头的变量,容易引发冲突。下划线在变量命名中有特殊含义:单个前导下划线表示内部变量,后置下划线用于避免与关键字冲突,双下划线前后包围表示系统变量。总结了下划线的不同用法及其作用。下次将继续探讨更实用的编程技巧。
29 3
|
1月前
|
人工智能 Shell 开发工具
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
60 32
|
24天前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
38 8
|
21天前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
23 4
|
1月前
|
人工智能 数据库 开发者
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
介绍了 Python 中 `try` 语句的完全体,包括 `try`、`except`、`else` 和 `finally` 子句的使用。通过实例展示了如何捕获异常并输出详细的错误信息,如文件名和行号。特别强调了 `finally` 子句的作用,无论是否发生异常,`finally` 都会执行,常用于清理操作。最后总结了 `try` 语句的四个部分及其应用场景,并简要提及了 Python 社区的决策机制。 #try #except #else #finally
27 1