Python异常处理:try...except语句

Python是一门非常灵活且易于学习的编程语言,在日常开发中被广泛应用。然而,由于各种原因,我们的代码可能会出现异常情况,例如输入错误、文件读写异常等等。Python异常处理是Python中重要的一部分,为了保证程序的稳定性和可靠性,我们需要使用异常处理来及时捕获,并以优雅的方式来处理这些异常。本教程将介绍如何处理 Python中的异常。

001314-16853767948533.jpg

1.使用 try/except 处理异常

在Python中,我们可以使用try…except语句来进行异常处理。try语句块中包含可能会导致异常的代码,如果有异常发生,则会跳转到相应的except语句块中进行处理。下面是一个简单的示例:

try:num = int(input("请输入一个整数:"))print("您输入的数字是:", num)
except:print("输入错误,请重新输入!")

在上述代码中,我们首先使用input函数获取用户输入的一个字符串,并通过int函数将其转换为整数。如果用户输入的不是整数,则会产生ValueError异常。当发生异常时,try 语句块中后续的代码将不再执行,而会跳转到相应的except语句块中进行处理。在本例中,我们使用print函数输出提示信息,告诉用户输入错误,请重新输入。

2.指定异常类型

除了简单的异常处理外,我们还可以根据不同的异常类型,采取不同的处理方式。例如,我们可以分别处理ValueErrorTypeError等异常:

try:num1 = int(input("请输入一个整数:"))num2 = int(input("请输入另一个整数:"))result = num1 / num2print("两数相除的结果是:", result)
except ValueError:print("输入错误,请输入整数!")
except ZeroDivisionError:print("除数不能为0!")
except:print("其他异常发生!")

在上述代码中,我们首先使用input函数获取用户输入的两个整数,然后计算它们的商。

如果其中有任意一个输入不是整数,则会产生ValueError异常;如果除数是0,则会产生ZeroDivisionError异常。当发生异常时,程序会跳转到对应的except语句块中进行处理。在本例中,我们根据不同的异常类型,输出不同的提示信息。

3.通用except语句

除了使用单独的except语句块来处理不同类型的异常外,我们还可以使用一个通用的except语句块来捕获所有异常:

try:file = open("test.txt", "r")content = file.read()print(content)
except Exception as e:print("发生异常:", e)
finally:file.close()

在上述代码中,我们首先尝试打开名为test.txt的文件,并读取其中的内容。如果文件不存在或无法读取,则会产生FileNotFoundError或IOError异常。 当发生异常时,我们使用一个通用的except语句块来捕获异常并输出异常信息。最后,我们使用finally语句块来关闭文件,保证资源得到释放。

4.主动抛出异常

除了上述几种常见的异常处理方式外,我们还可以使用raise语句来主动抛出异常。例如:

def divide(num1, num2):if num2 == 0:raise ZeroDivisionError("除数不能为0!")return num1 / num2try:result = divide(10, 0)print("两数相除的结果是:", result)
except ZeroDivisionError as e:print(e)

在上述代码中,我们定义了一个divide函数来计算两个数的商。如果除数为0,则使用raise语句抛出ZeroDivisionError异常,并输出对应的提示信息。 当调用该函数时,如果发生异常,则会跳转到相应的except语句块中进行处理。

总之,在Python中使用异常处理能够提高程序的稳定性和可靠性,避免因为意外情况导致程序崩溃或错误。在编写代码时,我们应该尽可能地考虑到可能出现的异常情况,并使用try…except语句来捕获和处理这些异常。 同时,还需要注意一些常见的异常类型以及对应的处理方式,例如ValueErrorTypeErrorZeroDivisionError等。如果遇到无法处理的异常,我们可以通过raise语句来主动抛出异常,让程序跳转到相应的except语句块中进行处理。

需要注意的是,在使用try...except语句时,我们应该尽可能地缩小try语句块中的范围,只包含可能会产生异常的代码,而不是整个程序都放在try语句块中。这样能够提高代码的执行效率,并且也更容易定位和解决问题。

194109-150305646946b9.jpg

5.总结

最后,值得一提的是,在 Python 3.x 中,我们可以使用更为灵活和强大的with语句来代替try...finally语句块,实现资源的自动关闭。例如:

with open("test.txt", "r") as file:content = file.read()print(content)

在上述代码中,我们使用with语句打开名为test.txt的文件,并读取其中的内容。在with语句块执行完毕后,文件会自动关闭,避免了手动调用close()方法的繁琐操作,也避免了因忘记关闭文件而导致的资源泄漏等问题。 关于文件读写的详细教程,可以阅读我的个人博客:Poycode编程指南 上的文章: Python文件和IO操作:读写文本文件、读写二进制文件

总之,Python异常处理是编写稳定、可靠程序的重要组成部分。通过熟练掌握try...except语句的使用方法以及常见的异常类型和处理方式,我们可以让程序更加健壮和可靠,提高开发效率和质量。

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
Python全套学习资料

在这里插入图片描述

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一、Gradle 手动创建一个项目

文章目录 Gradle 介绍Gradle Wrapper Gradle 使用手动安装 Gradle初始化 Gradle 介绍 Gradle 是一个快速的、可信的、适应性强的自动化构建工具,它是开源的。它使用优雅的并且可扩展的描述性语言。其他的介绍在官网可以了解。 Gradle Wrapper 官方建议使用 Gradl…

适配器模式-C++实现

适配器是一种结构型设计模式,用于将一个接口转换为另一个客户端所需要的接口。该模式通过创建一个适配器对象,使不兼容的接口可以协同工作。 适配器模式主要分为三个角色:适配器类、目标类、适配者类。 适配器模式分为对象适配器和类适配器…

信号收尾.

sigaction 信号捕捉 它也是信号捕捉,不仅能处理普通信号还能处理实时信号,但我们不管实时信号 我们发现函数名和形参中结构体名一样都是sigaction,这在c/c中允许吗? 不建议,但是可以 signo你要捕捉几号信号 输入型参…

HarmonyOS应用开发者基础认证考试题目及答案

一、判断题 Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 错误(False) 每调用一次ro…

老泮识趣:难忘何家桥

回忆何家桥往事,写了篇《消失的何家桥》,没想到点击率如此高,出乎意料。网友的共鸣可见,城市发展的今天,乡情是个美好的存在,清贫、朴实,丝毫不影响美感。由于大家的鼓励,触动了我再…

基于Netty实现TCP通信

创建一个Maven项目添加下面依赖 <dependencies><!-- 日志依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><g…

TCP 连接断开

1&#xff1a;TCP 四次挥手过程是怎样的&#xff1f; 客户端打算关闭连接&#xff0c;此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文&#xff0c;也即 FIN 报文&#xff0c;之后客户端进入 FIN_WAIT_1 状态。 服务端收到该报文后&#xff0c;就向客户端发送 ACK 应答报文…

【微信小程序】保存多张图片到本地相册 wx.saveImageToPhotosAlbum

这里写目录标题 微信小程序检测是否有存储权限wx.getSetting 图片上传从HTML中提取img标签的src属性多图片下载 微信小程序检测是否有存储权限 wx.getSetting 上传前判断是否开启存储权限&#xff0c;如果不检测直接上传会出现fail的情况 var _this this wx.getSetting({su…

阿里云崩溃了,为什么你没有收到补偿?【补偿领取方式放文末】

事情经过 北京时间11月27日&#xff0c;阿里云部分地域云数据库控制台访问出现异常。据悉&#xff0c;从当日09:16起&#xff0c;阿里云监控发现北京、上海、杭州、深圳、青岛、香港以及美东、美西地域的数据库产品(RDS、PolarDB、Redis等)的控制台和OpenAPI访问出现异常&…

PHP在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

this.$nextTick与this.$set,解决拖拽表格没有刷新问题!

一&#xff1a;this.$nextTick的用法 将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它&#xff0c;然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样&#xff0c;不同的是回调的 this 自动绑定到调用它的实例上。 原因是&#xff0c;Vue是异步执行DOM更…

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录 1. k8s环境 k8s使用kubernetes-server-linux-amd64_1.19.10.tar.gz 二进制bin 的方式手动部署 k8s 版本: [rootmaster ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&…

CentOS7安装RabbitMQ

服务器系统版本&#xff1a;CentOS7 安装RabbitMq版本&#xff1a;3.7.18 将此安装包目录下的两个文件上传到服务/usr/local/rabbitmq中备用。 安装Erlang依赖包 rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm安装RabbitMQ安装包(需要联网) yum install -y rabbitmq-server-3.7.1…

yml转properties工具

目前搜索到的大部分代码都存在以下问题&#xff1a; 复杂结构解析丢失解析后顺序错乱 所以自己写了一个&#xff0c;经过不充分测试&#xff0c;基本满足使用。可以直接在线使用 在线地址 除了yml和properties互转之外&#xff0c;还可以生成代码、sql转json等&#xff0c;可…

深入解析进程

在现代计算机系统中&#xff0c;进程是一个核心概念&#xff0c;它代表了程序的执行实例。通过并发执行多个进程&#xff0c;计算机能够提高效率和资源利用率。 1. 进程的概念 进程是指在计算机系统中正在执行的程序的实例。每个进程都有自己的地址空间、寄存器集合、堆栈和文…

【Linux】OpenSSH 命令注入漏洞(CVE-2020-15778)(iptables屏蔽22端口方式)

背景 漏洞名称&#xff1a;OpenSSH 命令注入漏洞(CVE-2020-15778) 详细描述&#xff1a;OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现&#xff0c;支持对所有的传输进行加密&#…

java:lombok库方便的使用@Getter和@Setter

背景 Lombok是一个Java库&#xff0c;它通过注解减少了大量常规代码&#xff0c;例如getter和setter方法&#xff0c;equals&#xff0c;hashCode&#xff0c;toString等方法。使用Lombok可以减少模板代码的编写&#xff0c;使代码更简洁&#xff0c;更易于阅读和维护。 常用…

DaVinci Resolve Studio达芬奇软件 18.6.3

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件&#xff0c;适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能&#xff0c;包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点&#xff1a; - 提供了全面的视…

Go map类型

一、map介绍 1、map说明 map是一种无须的基于key-value的数据结构&#xff0c;Go语言中的map是引用类型&#xff0c;必须初始化才能使用Go语言中map的定义语法如下&#xff1a;map[KeyType]ValueType其中 KeyType&#xff1a;表示键的类型ValueType&#xff1a;表示键对应的值…