98. Python基础教程:try...except...finally语句
【目录】
文章目录
- 1. try...except...finally语法介绍
- 2. try...except...finally执行顺序
- 3. 捕获特定类型的异常
- 4. 捕获所有类型的异常
- 5. 实操练习-打开txt文件并输出文件内容
【正文】
在今天的课程中,我们将学习Python中的异常处理语句try...except...finally
。
try...except...finally
是Python中的一个异常处理语句。
try...except...finally
语句的作用是捕获和处理程序中的异常。
1. try…except…finally语法介绍
try[traɪ]:尝试。
except[ɪkˈsept]:把…排除在外。
finally [ˈfaɪnəli]:最后。
【基本语法】
try:# 可能会引发异常的代码块
except ExceptionType1:# 异常类型1的处理代码块
except ExceptionType2:# 异常类型2的处理代码块
...
finally:# 无论是否发生异常,都会执行的代码块
2. try…except…finally执行顺序
-
在
try
代码块中,我们放置可能会引发异常的代码。 -
如果try代码块中的代码
引发了异常
,那么程序会跳转到对应的except
代码块进行处理。 -
如果try代码块中代码
没有引发异常
,那么程序执行try代码块中的代码,except
代码块将会被忽略。 -
except代码块可以有多个,每个except代码块用于处理不同类型的异常。
-
我们可以根据具体的需求,选择捕获和处理特定类型的异常。
-
无论是否发生异常,finally代码块中的代码最终都会被执行。
-
finally代码块通常用于关闭文件、释放数据库连接或进行一些清理操作。
-
它的作用是避免资源泄露和内存溢出等问题,从而提高程序的健壮性。
下面,我们通过一些案例来讲解try...except...finally
语句的应用。
3. 捕获特定类型的异常
【代码示例:98-1】
try:# 可能会出现异常的代码x = int(input("请输入第1个整数: "))y = int(input("请输入第2个整数: "))result = x / yprint("结果是:", result,'\n')
except ValueError as e:# 处理值错误异常print("输入的不是整数,请重新输入。", e,'\n')
except ZeroDivisionError as e:# 处理除零异常print("除数不能为零,请重新输入。", e,'\n')
except Exception as e:# 处理其他异常print("发生了一个异常:", e,'\n')
finally:# 无论是否发生异常,都会执行的代码print("程序结束。",'\n')
在上面的代码中,我们尝试将用户输入的两个整数相除,并打印结果。
如果用户输入的不是整数,会捕获到值错误异常,并输出提示信息。
如果用户输入的除数为零,会捕获到除零异常,并输出相应的提示信息。
如果发生其他类型的异常,会捕获到通用的异常,并输出异常信息。
注意无论是否发生异常,最后都会执行finally块中的代码,输出程序结束的提示信息。
【终端输出】
【温馨提示】
'\n'
是一个转义字符,表示换行符。它的作用是在输出中增加一个空行。
我是为了写笔记时框选内容方便而加的换行符,大家可以省略换行符。
【错误代码示例:98-2】
为了输出结果更加清晰易读,我想给input
语句也增加一个换行功能。
我想在下面每个输入语句代码后面增加了一个'\n'
:
x = int(input("请输入第1个整数: "))
y = int(input("请输入第2个整数: "))
增加后的代码如下所示:
x = int(input("请输入第1个整数: ",'\n'))
y = int(input("请输入第2个整数: ",'\n'))
【错误完整代码示例:98-2】
try:# 可能会出现异常的代码x = int(input("请输入第1个整数: ",'\n'))y = int(input("请输入第2个整数: ",'\n'))result = x / yprint("结果是:", result,'\n')
except ValueError as e:# 处理值错误异常print("输入的不是整数,请重新输入。", e,'\n')
except ZeroDivisionError as e:# 处理除零异常print("除数不能为零,请重新输入。", e,'\n')
except Exception as e:# 处理其他异常print("发生了一个异常:", e,'\n')
finally:# 无论是否发生异常,都会执行的代码print("程序结束。",'\n')
我们来看程序运行的结果。
【终端输出】
expected [ɪkˈspektɪd] :预期。
at most :至多。
arguments [ˈɑːgjʊmənts]:参数。
运行代码,程序发生input expected at most 1 argument, got 2
异常。
报错信息" input expected at most 1 arguments, got 2"
表示调用函数时只需要传递1个参数,但是在代码中却传递了两个参数。
x = int(input("请输入第1个整数: ",'\n'))
注意:输入函数input()
只能传递一个参数.
但上面的代码中有2个参数,一个是"请输入第1个整数: "
,另一个是'\n'
。
因为多输入了一个'\n'
,所以程序报错。
4. 捕获所有类型的异常
在不确定可能发生的异常种类的的情况下,我们可以使用Exception
来捕获任意类型的异常。
【代码示例:98-3】
try:num = int(input("请输入一个整数:"))result = 10 / numprint("结果为:", result)
except Exception as e:print("发生了异常:", e)
finally:print("程序执行完毕。")
【终端输出】
【Exception和BaseException的区别】
-
Exception和BaseException是Python中的异常类。
-
Exception是所有异常类的基类,而BaseException是Exception的父类。
-
Exception类是Python中所有内置异常类的基类,它包含了常见的异常情况,如ZeroDivisionError、TypeError等。我们可以使用try-except语句来捕获并处理这些异常。
-
BaseException类是Exception的父类,它是所有内置异常类的根源。它包含了一些特殊的异常情况,如SystemExit、KeyboardInterrupt等。这些异常通常是由Python解释器或操作系统引发的,而不是由我们的代码引发的。因此,我们无法使用try-except语句来捕获不是代码引发的异常。
-
总的来说,Exception是用于捕获和处理常见异常的基类,而BaseException是用于捕获和处理特殊异常的父类。在编写代码时,我们通常使用Exception来捕获和处理异常,而不需要直接使用BaseException。
5. 实操练习-打开txt文件并输出文件内容
【目标任务】
编写一个程序,要求用户输入一个文件名,然后尝试打开该文件并读取其中的内容。
如果文件不存在,捕获异常并输出错误提示信息,最后用finally关闭文件。
【准备工作】
新建一个联系方式.txt
文件,文件内容如下:
安迪python学习笔记
xyz77520520
文件存储的绝对路径如下:
D:\安迪笔记\1.基础语法\98\联系方式.txt
我用的vscode编辑器,编辑器打开的文件夹是【安迪笔记】,因此联系方式.txt
文件的相对路径如下:
1.基础语法\98\联系方式.txt
67. Python的绝对路径
68. Python的相对路径
vscode编辑器也可以快速查看文件的路径,具体参考上面的笔记。
【安迪碎碎念】
我在编写代码时,如果题目要求写输入语句,我起初都会省略输入语句,而是先采取赋值的方式来完成代码。
这样做的好处是如果代码有异常,可以快速的查找错误,避免在终端输入时浪费过多时间,且很多新手终端输入时更容易出错。
【代码示例:98-4】
我先省略输入语句。
try:file = open('1.基础语法\98\联系方式.txt', 'r', encoding="utf-8")content = file.read()print(content)
except Exception as e:print("发生了异常:", e)
finally:file.close()print("文件已关闭!")
【终端显示】
我们添加上输入语句:
【代码示例:98-5】
try:filename = input("请输入文件名:")print('\n')file = open(filename, 'r', encoding="utf-8")content = file.read()print(content)
except Exception as e:print("发生了异常:", e,'\n')
finally:file.close()print("文件已关闭!")
当我在终端输入联系方式.txt
时,终端显示如下图所示:
【终端输出】
【报错解析】
[Errno 2] No such file or directory: 'filename '
意思是没有这样的文件或目录。
当出现报错[Errno 2] No such file or directory: 'filename'时
,通常是因为指定的文件或目录不存在。
这个错误可能有几种可能的原因:
-
首先,可能是文件或目录的路径不正确,即文件或目录不存在于指定的路径中。
-
其次,可能是文件或目录的权限设置不正确,导致无法访问。
-
最后,可能是文件或目录被误删或移动到其他位置。
这里是因为我们输入的不是文件正确的路径,因此程序报错。
NameError: name 'file' is not defined
意思是在代码中使用了一个未定义的变量或函数名file
。
这个错误是因为在finally
块中,file
变量没有定义。
这是因为在try
块中的代码发生了异常,程序没有执行完try
块中的代码,因此file
变量就没有被定义。
然后程序执行except
块中的语句,输出异常原因。
最后,程序执行finally
块的file.close()
时,因为file
变量就没有被定义,所以程序报错输出NameError: name 'file' is not defined
。
只要我们输入正确的路径,程序就能正常输出了。
运行程序,在终端输入1.基础语法\98\联系方式.txt
。
【代码解析】
try:filename = input("请输入文件名:")print('\n')file = open(filename, 'r', encoding="utf-8")content = file.read()print(content)
except Exception as e:print("发生了异常:", e,'\n')
finally:file.close()print("文件已关闭!")
总体框架使用try-except-finally结构来处理异常。
filename = input("请输入文件名:")
第2行:提示用户输入文件名,并将输入的文件名赋值给变量filename
,注意这里要输入的文件名是文件的绝对路径或相对路径。
如果你只想输入文件的名称联系方式.txt
作为文件的相对路径,那你可以将.py
文件和.txt
文件存储在同一个文件夹里,并且用vscode编辑器直接打开该文件夹,这样文件名就是文件的相对路径了。
print('\n')
第3行:打印一个换行符。
file = open(filename, 'r', encoding="utf-8")
第4行:使用open()函数以只读模式打开文件,指定编码为utf-8,并将打开的文件对象赋值给变量file。
open函数语法回顾
open(filename, mode, encoding)
filename
:要打开的文件名(包括路径)。mode
:打开文件的模式,可以是'r'
(只读模式,默认值)、'w'
(写入模式,会覆盖文件中的内容)、'a'
(追加模式,在文件末尾添加内容)等。encoding
:指定文件的编码方式,默认为None
,表示使用系统默认编码。常用的编码方式有'utf-8'
、'gbk'
等。
content = file.read()
第5行:使用read()
方法读取文件的全部内容,并将内容赋值给变量content。
read()方法是文件对象的一个方法,用于读取文件的内容。
它没有参数,调用该方法会将整个文件的内容读取出来,并返回一个字符串。
read()方法语法回顾
file.read()
file是一个文件对象,可以通过open()函数打开一个文件获得该文件对象。
read是方法名。
read()方法会从文件的当前位置开始读取内容,读取到文件末尾时停止。
读取的内容会以字符串的形式返回,并赋值给变量content。
print(content)
第6行:打印文件的内容。
except Exception as e:
第7行:捕获异常,并将异常对象赋值给变量e。
print("发生了异常:", e,'\n')
第8行:输出异常内容。
finally:
第9行:finally块中的代码始终会执行,无论是否发生异常。
file.close()
第10行:关闭文件。
print("文件已关闭!")
第11行:打印提示信息,表示文件已关闭。
【错误代码示例】
try:filename = input("请输入文件名:")print('\n')file = open(`filename`, 'r', encoding="utf-8")content = file.read()print(content)
except Exception as e:print("发生了异常:", e,'\n')
finally:file.close()print("文件已关闭!")
上面的代码是错误,不管你在终端输入什么,程序都会报错。
这也是很多同学容易犯的错误,有兴趣的同学找找看错误在哪里吧!
相关文章:

98. Python基础教程:try...except...finally语句
【目录】 文章目录 1. try...except...finally语法介绍2. try...except...finally执行顺序3. 捕获特定类型的异常4. 捕获所有类型的异常5. 实操练习-打开txt文件并输出文件内容 【正文】 在今天的课程中,我们将学习Python中的异常处理语句try...except...finally。 …...

c语言实现简单的tcp客户端
功能:实现一个简单的tcp客户端,连接本地端口8888的tcp服务端,并发送一条报文。 /* * File: main.c* Author: vincent** Created on 2023年8月3日, 上午9:56*/#include <stdio.h> #include <stdlib.h> #include <string.h…...

RocketMQ详解及注意事项
RocketMQ是阿里巴巴开源的一款分布式消息中间件,具有高吞吐量、高可用性、可扩展性和稳定性强等特点,广泛应用于异步消息、应用解耦、流量削峰填谷等场景。本文将详细介绍RocketMQ的基本架构、工作流程、消息模型,并列出在使用RocketMQ时需要…...
选择适合的项目管理系统,了解有哪些选择和推荐
随着科技的进步和全球竞争的加剧,项目管理已经成为企业成功的关键要素。为了更好地组织和监控项目,许多企业和组织正在采用项目管理系统(PMS)。本文将探讨项目管理系统的主要组成部分以及其在实际应用中的优势。 “项目管理系统有哪些?国际上比较常见的…...

linux基础命令-cd
切换当前工作目录使用 cd 命令 在 Linux 操作系统中,cd 是一个常用的命令,用于切换当前的工作目录。工作目录是用户当前所在的文件夹,执行命令时将会在该目录中进行操作。cd 命令的功能是更改当前工作目录到指定的目录位置。在本文中…...

MySQL数据库分库分表备份
分库备份 创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash 备份的路径 bak_path/backup/db 账号密码 mysql_cmd-uroot -pRedHat123 需要排除的数据库 exclude_dbinformation_schema|mysql|performance_schema|sys 检验备份路径是否存在&#…...

PyTorch 中的累积梯度
https://stackoverflow.com/questions/62067400/understanding-accumulated-gradients-in-pytorch 有一个小的计算图,两次前向梯度累积的结果,可以看到梯度是严格相等的。 代码: import numpy as np import torchclass ExampleLinear(torch…...

【面试精品】运维工程师需要具备的核心能力有哪些?
运维,在部分没有接触过IT的小伙伴的概念中觉得是一个比较低级的职位,很容易从字面理解为运营、维护. 很多朋友认为,无论IDC机房运维、网络运维、桌面运维、Linux系统运维、数据库运维、云计算运维、等在互联网公司中的工作就是安装系统&…...

微服务实战项目-学成在线-选课学习(支付与学习中心)模块
微服务实战项目-学成在线-选课学习(支付与学习中心)模块 1 模块需求分析 1.1 模块介绍 本模块实现了学生选课、下单支付、学习的整体流程。 网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选…...

postman和jmeter的区别何在?
小伙伴们大家好呀,前段时间笔者做了一个小调查,发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的…...

maven安装(windows)
环境 maven:Apache Maven 3.5.2 jdk环境:jdk 1.8.0_192 系统版本:win10 一、安装 apache官网下载需要的版本,然后解压缩,解压路径尽量不要有空格和中文 官网下载地址 https://maven.apache.org/download.cgihttps:…...

自学安全卷不动,是放弃还是继续?
有天我想去搜一下怎么约女孩子看电影比较不油腻的时候,突然看到一个话题“自学网络安全的人都是什么感受”。 因为我的粉丝们大部分都是在自学或者是准备入行的大学生,所以我很认真一个一个去看了下别人的回答。基本都是劝退自学为主,因为自学…...

Django实现音乐网站 ⑶
使用Python Django框架制作一个音乐网站,在系列文章2的基础上继续开发,本篇主要是后台单曲、专辑、首页轮播图表模块开发。 目录 后台单曲、专辑表模块开发 表结构设计 单曲表(singe)结构 专辑表(album)…...

(13) Qt事件系统(two)
目录 事件分发函数 无边框窗口拖动 自定义事件 发送事件的函数 自定义事件 系统定义的事件号 自定义事件号 自定义事件类 发送和处理事件 sendEvent与postEvent的区别 栈区对象 堆区对象 事件传播机制 事件传播的过程 事件传播到父组件 鼠标单击事件与按钮单击信…...

PHP的知识概要
PHP技术基础 1、PHP是Hypertext Preprocessor的缩写,是基于服务器端运行的脚本程序语言,可以实现数据库和网页之间的数据交互。PHP可以单独运行,也可镶嵌在HTML文件 中。它具有开发快速、性能稳定的优点。 2、PHP是嵌入式脚本语言&…...

JSON格式Python,Java,PHP等封装根据商品ID获取快手商品详情数据方法
快手商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取拼多多商品详情数据,您可以通过开放平台的接口或者直接访问快手商城的网页来获取商品详情信息。以下是两种常用方法的介绍: 1.…...

【ASP.NET MVC】MYSQL安装配置(4)
一、安装配置 1、下载MYSQL绿色版压缩包(略) 2、解压到目录,比如E:\mysql目录 3、设置环境变量 添加bin目录到path,方便运行Mysql的命令 先打开系统的《环境变量》配置 双击系统变量中的Path 添加Mysql的BIN目录到path: 4、在…...

前端框架学习-Vue(二)
最近在学习Vue框架,Vue中的内容很多。相当于把之前后端的MVC,V层转移到前端来编写和部署。下面是学习Vue时的大纲。 Vue生命周期是Vue应用的生命周期Vue脚手架,即vue-cli,使用node.js 来创建和启动vue项目Vue组件知识,…...

sublime配置less的一些坑(1)
仅在sublime的Install Package安装保存less报错 在sublime的Install Package安装less 打开sublime软件,按住CtrlShiftP组合键,弹出的界面中选择Install Package 选中后enter或者回车。等会弹出一个弹窗,大致意思是说你已经成功安装了package control。如果你在此之前已经安装了…...

解码“平台工程”,VMware 有备而来
随着全球数字化进程加快,企业使用前沿技术加快商业创新,以提高竞争力。其中如何加快开发效率,为客户创造更多价值成为新的关注焦点。 继DevOps后,“平台工程”(Platform Engineering) 一词引发热议。平台工…...

2023年第四届华数杯数学建模A题B题C题D题思路代码分析
文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor 1 竞赛信息 为了培养学生的创新意识及运用数…...

java版直播商城平台规划及常见的营销模式+电商源码+小程序+三级分销+二次开发 bbc
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…...

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点
一、摘要 一般情况下,我们的笔记本或工作电脑都默认安装windows 分几个区,当下是win7 win8 win 10 win11 等,突然我们有需求需要安装个centos ,后面我们应当怎么做,要点是什么?一定要根据网上的贴子一步步来…...

FSDirectory 与 RAMDirectory
FSDirectory和RAMDirectory是Lucene搜索引擎中两种不同的Directory实现,用于管理索引数据的存储。Lucene是一个强大的开源搜索引擎库,它用于创建全文搜索功能,而Directory则是用来表示索引数据的存储位置。 FSDirectory: FSDirectory是将索引…...

小程序开发:开发框架与工具的使用指南
引言 本文以微信小程序为例介绍了小程序开发框架与工具的使用,通过本文的阅读,相信大家能够简单了解小程序开发的基本流程和常用工具,从而快速上手小程序开发。 文章目录 引言一、小程序开发框架与工具简介1.1 小程序开发框架1.2 小程序开发工…...

【LeetCode】探索杨辉三角模型
一、题目描述 力扣原题 首先我们要来了解一下题目本身在说些什么,通过下方的动图我们可以更加清楚地看到杨辉三角是怎样一步步生成的。给到的示例中我们通过输入杨辉三角的行数,然后通过计算得到这个杨辉三角的每一行是什么具体的数值 二、模型选择 首先…...

Qt 中引入ffmpeg 动态库
1、前期准备 在qt引入ffmpeg动态库的时候,需要准备ffmpeg的动态库和头文件。 2、打开qt项目 在qt项目的.pro文件中添加以下几行代码 INCLUDEPATH $$PWD/thirtLib/ffmpeg4.2/include win32: LIBS -L$$PWD/thirtLib/ffmpeg4.2/lib/ -lavcodec -lavdevice -lavf…...

工程师是怎样对待开源 qt
工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师,亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践,也看到了很多 Bad Cases,所以想把自己的一些心得体会写在这里,供工程师进行…...

Maven中Servlet的坐标为什么要添加<scope>provided</scope>
Maven中Servlet的坐标 在Maven中,我们使用坐标(Coordinates)来唯一标识一个依赖库。对于Servlet,其坐标通常是指定servlet-api包。在使用Servlet时,我们需要将其添加到项目的依赖中,以便在编译、运行和测试…...

联发科CEO:未获准向华为供货,换机潮已过去,手机需求不会更差
据钜亨网报道,联发科近期召开了业绩说明会。蔡力行,该公司副董事长兼首席执行官,表明当前手机市场需求保持稳定,并且随着过去两年用户更换潮的过去,对手机市场明年有一定期望。 根据蔡力行的指示,联发科正在…...