当前位置: 首页 > news >正文

第二十讲 python中的异常结构-try except-else-finally

目录

1.try... except 结构

2. try... 多个except结构

3. try...except...else结构

4. try...except...finally结构

5. return语句和异常处理问题

5.1 异常处理前的 return

5.2异常处理后的 return

5.3 finally 块中的 return

6.常见的异常


1.try... except 结构

try except 是最常见的异常处理结构。结构如下:

try:# 可能会引发异常的代码块result = 10 / 0
except ExceptionType as e:# 处理异常的代码块print(f"发生了异常: {e}")
  • try:包含可能会引发异常的代码。如果在 try 块中的代码引发了异常,Python 会跳过 try 块中余下的代码,直接执行 except 块。

  • except:用于捕捉和处理异常。你可以指定要捕获的异常类型,也可以捕获所有异常类型。as e 用于获取异常实例,并可以访问异常消息或其他信息。

  • 执行的时候,如果try块中没有引发异常,则跳过except块继续执行后续代码.

  • 执行的时候,如果try块中发生了异常,则跳过try块中的后续代码,跳到相应的except块中处理异常,异常处理完后,继续执行后续代码。

2. try... 多个except结构

try 块配合多个 except 块可以处理不同类型的异常。每个 except 块负责处理特定类型的异常。

try:# 可能会引发异常的代码result = int("not_a_number")
except ValueError as ve:# 处理 ValueError 异常print(f"值错误: {ve}")
except ZeroDivisionError as zde:# 处理 ZeroDivisionError 异常print(f"除零错误: {zde}")
except FileNotFoundError as fnfe:# 处理 FileNotFoundError 异常print(f"文件未找到: {fnfe}")
except Exception as e:# 捕获其他所有异常print(f"其他异常: {e}")
  • 具体到通用:将最具体的异常类型放在前面,更通用的异常类型放在后面。这确保特定的异常类型能被准确处理。

  • 顺序重要except 块的顺序是重要的。Python 按顺序检查 except 块,从上到下。如果上面的块能处理异常,下面的块将不会执行。

  • 通用异常Exception 用于捕获所有其他异常,但最好先捕获已知的具体异常。

如下例子:

try:value = int(input("请输入一个整数: "))result = 10 / value
except ValueError as ve:print(f"输入无效: {ve}")
except ZeroDivisionError as zde:print(f"不能除以零: {zde}")
except Exception as e:print(f"发生了一个错误: {e}")
else:print(f"计算结果是: {result}")
finally:print("结束处理")

ValueError 处理输入转换错误,ZeroDivisionError 处理除零错误,Exception 捕获所有其他未特定处理的异常。else 块在没有异常时执行,finally 块在 tryexcept 块之后总是执行。

3. try...except...else结构

try...except...else 结构用于更精确地控制异常处理和正常执行的代码块。else 块是在 try 块中的代码没有引发异常时执行的。这个结构可以帮助你在没有异常的情况下执行特定的代码,从而提高代码的清晰度和可维护性。

try:# 可能会引发异常的代码result = 10 / int(input("请输入一个整数: "))
except ZeroDivisionError as zde:# 处理 ZeroDivisionError 异常print(f"除零错误: {zde}")
except ValueError as ve:# 处理 ValueError 异常print(f"输入错误: {ve}")
else:# 没有异常时执行的代码print(f"计算结果是: {result}")
finally:# 无论是否发生异常都会执行的代码(可选)print("处理结束")
  • else:在 try 块中的代码没有引发异常时执行。else 块用于执行那些在没有异常的情况下需要运行的代码。它不会被执行到 except 块处理完所有异常之后才会执行。

4. try...except...finally结构

  • try...except...finally 结构用于在处理异常时确保某些代码始终被执行。这种结构的关键在于 finally 块,它会在 try 块和 except 块执行完毕之后总是被执行,无论是否发生异常。它通常用于资源管理和清理工作,确保即使在发生异常的情况下也能完成必要的清理操作。
  • 用来释放try块中申请的资源

try:# 尝试打开文件并读取内容file = open("example.txt", "r")content = file.read()print(content)
except FileNotFoundError as e:# 处理文件未找到的异常print(f"文件未找到: {e}")
except IOError as e:# 处理其他 I/O 错误print(f"文件读取错误: {e}")
finally:# 确保文件始终被关闭try:file.close()except NameError:# 如果文件打开失败,file 变量可能没有被定义passprint("文件处理完毕")
  • finally:无论是否发生异常,finally 块中的代码都会被执行。这常用于清理资源(如关闭文件、释放锁或关闭数据库连接),确保这些操作总是被执行。

5. return语句和异常处理问题

  • return 语句用于从函数中返回值并结束函数的执行。异常处理则用于捕获和处理运行时错误,防止程序崩溃。return 语句与异常处理的交互可以影响函数的行为,特别是当异常发生时。
  • 由于return有两种作用:结束方法运行、返回值。我们一般不把return放到异常处理结构中,而是放到方法最后.

5.1 异常处理前的 return

如果函数在执行过程中遇到异常,return 语句在异常被捕获之前不会被执行。

def safe_divide(x, y):try:return x / yexcept ZeroDivisionError:return "Cannot divide by zero."

5.2异常处理后的 return

except 块可以在捕获异常后使用 return 语句返回特定值。finally 块中的代码也可以使用 return,但它会覆盖之前的 return

def func(x):try:if x < 0:raise ValueError("Negative value")return x * 2except ValueError:return "Invalid input"finally:print("Cleanup code")  # 总会执行

5.3 finally 块中的 return

except 块可以在捕获异常后使用 return 语句返回特定值。finally 块中的代码也可以使用 return,但它会覆盖之前的 return

def example():try:return 1finally:return 2  # 覆盖前面的 return
def process_value(x):try:if x < 0:raise ValueError("Negative value not allowed.")return x * 10except ValueError as e:return f"Error: {e}"finally:print("Finished processing.")# 使用示例
print(process_value(5))   # 输出: 50
print(process_value(-1))  # 输出: Error: Negative value not allowed.

6.常见的异常

     

异常名

ArithmeticError

所有数值计算错误的基

AssertionError

断言语句失

AttributeError

对象没有这个属

BaseException

所有异常的基

DeprecationWarning

关于被弃用的特征的警

EnvironmentError

操作系统错误的基

EOFError

没有内建输入,到达EOF 

Exception

常规错误的基

FloatingPointError

浮点计算错

FutureWarning

关于构造将来语义会有改变的警

GeneratorExit

生成器(generator)发生异常来通知退

ImportError

导入模块/对象失

IndentationError

缩进错

IndexError

序列中没有此索引(index)

IOError

输入/输出操作失

KeyboardInterrupt

用户中断执行(通常是输入^C)

KeyError

映射中没有这个

LookupError

无效数据查询的基

MemoryError

内存溢出错误(对于Python 解释器不是致命的)

NameError

未声明/初始化对象 (没有属性)

NotImplementedError

尚未实现的方

OSError

操作系统错

OverflowError

数值运算超出最大限

OverflowWarning

旧的关于自动提升为长整型(long)的警

PendingDeprecationWarning

关于特性将会被废弃的警

ReferenceError

弱引用(Weak reference)试图访问已经垃圾回收了的对

RuntimeError

一般的运行时错

RuntimeWarning

可疑的运行时行为(runtime behavior)的警

StandardError

所有的内建标准异常的基

StopIteration

迭代器没有更多的

 

异常名

SyntaxError

Python 语法错

SyntaxWarning

可疑的语法的警

SystemError

一般的解释器系统错

SystemExit

解释器请求退

TabError

Tab 和空格混

TypeError

对类型无效的操

UnboundLocalError

访问未初始化的本地变

UnicodeDecodeError

Unicode 解码时的错

UnicodeEncodeError

Unicode 编码时错

UnicodeError

Unicode 相关的错

UnicodeTranslateError

Unicode 转换时错

UserWarning

用户代码生成的警

ValueError

传入无效的参

Warning

警告的基

WindowsError

系统调用失

ZeroDivisionError

(或取模)(所有数据类型)

相关文章:

第二十讲 python中的异常结构-try except-else-finally

目录 1.try... except 结构 2. try... 多个except结构 3. try...except...else结构 4. try...except...finally结构 5. return语句和异常处理问题 5.1 异常处理前的 return 5.2异常处理后的 return 5.3 finally 块中的 return 6.常见的异常 1.try... except 结构 try except 是…...

springer 投稿系统中返修注意点

初次提交 初次提交时&#xff0c; manuscript 提交的是 pdf 文件 返修后提交 在经过返修之后需要提交的是注意一下几点&#xff1a; 此时提交的Blined manuscript &#xff0c;虽然名字没变&#xff0c;但不能再提交pdf 文件&#xff0c; 而需要提交的是可编辑的源文件 .te…...

CSS:display和visiblity

隐藏元素- display:none和visibility:hidden display 属性设置一个元素应如何显示&#xff0c;visibility 属性指定一个元素应可见还是隐藏。 隐藏一个元素可以通过吧display属性设置为“none”&#xff0c;或者把visibility属性设置为“hidden”。但是这两种会产生不同的结果…...

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Redis地理位置相关应用

下面是一个结合 MySQL 数据库和 Redis 的地理位置服务示例&#xff0c;包含表结构、PHP 代码和 Redis 操作&#xff0c;用于处理基于地理位置的数据存储和查询。 1. 创建 MySQL 数据库表 首先&#xff0c;创建一个用于存储位置信息的 MySQL 表&#xff0c;如下所示&#xff1…...

优化WAN流量:如何通过调整系统设置降低企业网络成本

一、症状与问题背景 当电脑显示空闲状态时&#xff0c;如果满足以下条件&#xff0c;第二拨号链接可能会意外激活&#xff1a; 您正在使用基于 Microsoft Windows 的计算机&#xff0c;该计算机连接到远程网络并且是 Active Directory 域服务 (AD DS) 域的成员。 您通过二级…...

Java-HttpHeaders请求头或响应头

HttpHeaders 是 Spring Framework 中的一个类,用于封装 HTTP 头部信息。它提供了一种方便的 方式来设置 HTTP 请求头和处理 HTTP 响应头。下面分别介绍如何使用 HttpHeaders 来设置请求 头和处理响应头。 设置请求头 在发送 HTTP 请求时,可以通过 HttpHeaders 设置各种请…...

Elasticsearch高阶查询

Elasticsearch高阶查询 文章目录 Elasticsearch高阶查询相关性和相关性算分相关性 (Relevance)什么是TF-IDFBM25explain关键字Boosting如何通过Boost控制想要的文档排在前面&#xff1f; 布尔查询&#xff08;bool Query&#xff09;查询语法语法格式 单字符串多字段查询三种场…...

【流媒体】RTMPDump—RTMP_Connect函数(握手、网络连接)

目录 1. RTMP_Connect函数1.1 网络层连接&#xff08;RTMP_Connect0&#xff09;1.2 RTMP连接&#xff08;RTMP_Connect1&#xff09;1.2.1 握手&#xff08;HandShake&#xff09;1.2.2 RTMP的NetConnection&#xff08;SendConnectPacket&#xff09; 2.小结 RTMP协议相关&am…...

通过https方式访问内网IP

单位要做个用浏览器扫二维码的功能。我先在本地测试一直不成功&#xff0c;后来放到服务器上运行成功了。比较了一下&#xff0c;服务器上是https&#xff0c;但是本地没有证书。我问了一下信安的同事&#xff0c;要求二维码必须在本地扫描&#xff0c;不能上公网。所以只好在本…...

flutter 键盘弹出 都会重新Build

原因是调用MediaQuery.of(context)后&#xff0c;点击TextField组件时会导致调用build方法。 解决方法&#xff1a;在Scaffold组件的body嵌套Builder组件&#xff0c;然后设置一个BuildContext变量&#xff0c;将Builder组件中的context传递给BuildContext变量&#xff0c;然后…...

RedisDistributedLock 分布式锁

设计一个简单的 RedisDistributedLock 类&#xff0c;实现单例模式&#xff0c;并包含基本的锁定机制。这个类将使用 Redis 来管理锁&#xff0c;确保在分布式系统中资源的同步访问 import redis.clients.jedis.Jedis;public class RedisDistributedLock {private static Redi…...

Java之包装类

Java中的包装类&#xff08;Wrapper Classes&#xff09;是基本数据类型的对象包装类。Java为每个基本数据类型&#xff08;如int、char等&#xff09;提供了对应的包装类&#xff0c;使得基本类型可以被当作对象来处理。这些包装类位于java.lang包中。 包装类的用途 对象化&a…...

Linux - 权限

文章目录 一、用户二、文件 一、用户 1、Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 。 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“…...

免费图形化nginx管理工具nginxWebUI

nginxWebUI是一款图形化管理nginx配置得工具, 可以使用网页来快速配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, 静态html服务器, ssl证书自动申请、续签、配置等, 配置好后可一建生成nginx.conf文件, 同时可控制nginx使用此文件进行启动与重载, 完…...

编程上的挫折不可怕,可怕的是你畏惧了

如何克服编程学习中的挫折感 编程学习之路上&#xff0c;挫折感就像一道道难以逾越的高墙&#xff0c;让许多人望而却步。然而&#xff0c;真正的编程高手都曾在这条路上跌倒过、迷茫过&#xff0c;却最终找到了突破的方法。那么&#xff0c;我是如何在Bug的迷宫中找到出口的&…...

docker逃逸手法

docker逃逸手法 基本docker操作docker 命令dockerfilesDocker Compose漏洞利用容器漏洞 基本docker操作 docker 命令 # docker拉取 docker pull # 指定版本拉取 docker pull ubuntu:22.04# 显示镜像可执行的操作 docker image # 列出存储在本地系统上的所有图像 docker image…...

3 pytest Fixture

3 pytest Fixture 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture …...

pinctl 和 gpio子系统驱动

一.设备树中添加pinctl节点模板 1.创建对应的节点 同一个外设的 PIN 都放到一个节点里面&#xff0c;打开 imx6ull-14x14-evk.dts&#xff0c;在 iomuxc 节点 中的“imx6ul-evk”子节点下添加 “pinctrl_test” 节点。添加完成以后如下所示&#xff1a; pinctrl_test:test_g…...

RocketMQ消息堆积了怎么解决?

RocketMQ 的消息堆积&#xff0c;一般都是因为客户端本地消费过程中&#xff0c;由于消费耗时过长或消费并发度较小等原因&#xff0c;导致客户端消费能力不足&#xff0c;出现消息堆积的问题。 当线上出现消息堆积的问题时&#xff0c;一般有以下几种方式来解决: 增加消费者…...

C++第十二弹 -- STL之list模拟实现

文章索引 前言模拟实现list1. ListNode节点类2. list的迭代器封装3. 反向迭代器4. list类的模拟实现测试代码 list的反向迭代器总结 前言 通过模拟实现可以让我们更加深刻的理解C底层STL的实现逻辑, 本篇就对list的底层进行模拟实现. 博客主页: 酷酷学!!! 点击关注 共同进步!…...

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云&#xff0c;波澜再兴&#xff0c;GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00&#xff08;GMT8&#xff09;&#xff0c;现已正式开启&#xff01; 这是一个由人、游灵和神灵共存的世界&#xff0c;历经蛮荒时期的纷争与信…...

QT聊天室基于Tcp

server.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this)) // 给服务器指针对象实例化空间{ui->setupUi(this); }Widget::~Widget() {delete ui; }…...

公开课观后感:密歇根大学python for everyone

从2024年1月17日到2024年8月20日&#xff0c;终于将密歇根大学的python for everyone的python公开课跟完。站在一月份规划的时刻来看&#xff0c;比我想象中花费的时间更多&#xff0c;我当时肯定没有想到要花上整整七个月的时间才能将这个公开课的内容看完&#xff0c;毕竟这个…...

goweb框架-gin

文章目录 Gin框架概览Gin框架的特点Gin框架的安装和基本使用安装基本使用 路由系统路由的基本概念Gin框架路由的特点 Radix Tree&#xff08;基数树&#xff09;基数树的定义和原理基数树在Gin框架中的应用节省空间的优化动态路由和通配符处理 路由树的构建注册路由的过程路由树…...

2024年接口测试高频面试题及答案

1. 什么是接口测试&#xff1f; •接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求 •测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系 2. 为什么要做接口…...

ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(8)

接前一篇文章:ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(7) 前边几回分析了笔者在MQTT测试时所遇到的问题: 最终定位到了是由于components\components\tcp_transport\transport_ssl.c的base_poll_write函数中调用的select函数超时返回…...

Linux: 忘记密码的解决方法,passwd

https://www.redhat.com/sysadmin/recover-root-passwd 这里的方法很简单&#xff0c;就是通过console进去&#xff0c;添加一个启动参数&#xff0c;加载sysroot&#xff0c;然后用passwd命令修改密码。这个是RHEL7适用。 https://access.redhat.com/solutions/1192 这个是提…...

36. 有效的数独【 力扣(LeetCode) 】

一、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图…...

机器学习中的没有免费午餐定理

嘿&#xff0c;各位机器学习的爱好者们&#xff01;今天&#xff0c;让我们一起深入探讨机器学习中那个神秘而又重要的概念——没有免费午餐定理。 一、定理引入&#xff1a;探索算法森林的钥匙 在广阔无垠的机器学习领域中&#xff0c;免费午餐定理就如同一把神奇的钥匙&…...

网站制作需求表/企业网站制作费用

复习Python的Day4 复习Python的Day4习题 5 更多的变量和打印习题代码加分习题 格式化操作符格式化操作符辅助符 习题 5: 更多的变量和打印 每一次使用” “把一些文本引用起来&#xff0c;你就建立了一个字符串&#xff0c;的的确确&#xff0c;字符串是非常好用的东西。 字符…...

织梦 和wordpress/淘宝关键词指数查询

1.点击如下链接进入下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 按照提示安装成功&#xff01;&#xff08;很简单&#xff09; 下载如图&#xff1a; 2.找到如图所示的目录&#xff08;直到home,是bin的根目录&#xff09;…...

个人网站能 做淘客吗/怎么自己创建网站

进大厂本来就很难了&#xff0c;不过做足了准备&#xff0c;你会发现很多问题都迎刃而解了&#xff0c;当然有时候运气也占了一部分&#xff0c;除了运气以外&#xff0c;当然与我自身的努力也是分不开的。运气也是实力的一部分&#xff0c;毕竟天助自助者~ 每次到年底做总结的…...

wordpress 运行时间/优化百度百科

...

做日本机械零件的外贸网站/可以看封禁网站的浏览器

更多LeetCode算法与参考&#xff1a; https://github.com/kkman2008/Notebook/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3.md ------------------------------------ 将整数字符串转成整数值 题目 给定一个字符串str&#xff0c;如果str符合日常书写的整数形式&…...

网站设计网页主页介绍/独立站建站平台

JSON.stringify() 转JSON字符串 JSON.parse() 转JSON对象...