菜鸟教程《Python 3 教程》笔记(19):错误与异常
菜鸟教程《Python 3 教程》笔记(19)
- 19 错误和异常
- 19.1 assert(断言)
- 19.2 异常处理
- 19.2.1 try/except
- 19.2.2 try/except...else
- 19.2.3 try-finally 语句
- 19.3 抛出异常
- 19.4 用户自定义异常
- 19.5 清理行为
- 19.5.1 定义清理行为
- 19.5.2 预定义的清理行为
- 19.5.3 with 关键字
笔记带有个人侧重点,不追求面面俱到。
19 错误和异常
出处: 菜鸟教程 - Python3 错误和异常
Python 有两种错误很容易辨认:语法错误和异常。
19.1 assert(断言)
assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,
语法格式:
assert expression [, arguments]
等效于:
if not expression:raise AssertionError(arguments)
实例:
>>> assert 1==2 # 条件为 false 触发异常
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError>>> assert 1==2, '1 不等于 2'
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError: 1 不等于 2
19.2 异常处理
个人理解: 进行异常处理是为了避免直接抛出异常而导致暴露,通过接收不同的异常可以进行针对性地处理(或者做出提示)。

图片出处:菜鸟教程 - Python3 错误和异常
19.2.1 try/except
可以使用 try/except 语句异常捕捉。
try 语句执行逻辑:
- 执行
try子句; - 如果没有异常发生,忽略
except子句,try子句执行后结束,如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略; - 如果异常的类型和 except 之后的名称相符,那么对应的
except子句将被执行,如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的 try 中。
一个 try 语句可能包含多个 except 子句,分别来处理不同的特定的异常,最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:
except (RuntimeError, TypeError, NameError):pass
可以使用 Exception 捕获除了 SystemExit、KeyboardInterrupt 和 GeneratorExit 之外的所有异常。 如果还想捕获这三个异常,可以将 Exception 改成 BaseException 即可。
except Exception as err:print(err)
最后一个 except 子句可以忽略异常的名称,它将被当作通配符使用。可以使用这种方法打印一个错误信息,然后再次把异常抛出:
import systry:f = open('myfile.txt')s = f.readline()i = int(s.strip())
except OSError as err:print("OS error: {0}".format(err))
except ValueError:print("Could not convert data to an integer.")
except:print("Unexpected error:", sys.exc_info()[0])raise # 抛出异常
19.2.2 try/except…else
else 子句将在 try 子句没有发生任何异常的时候执行。使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。
for arg in sys.argv[1:]:try:f = open(arg, 'r')except IOError:print('cannot open', arg)else:print(arg, 'has', len(f.readlines()), 'lines')f.close()
异常处理并不仅仅处理那些直接发生在
try子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
19.2.3 try-finally 语句
finally 语句无论异常是否发生都会执行。
try:runoob()
except AssertionError as error:print(error)
else:try:with open('file.log') as file:read_data = file.read()except FileNotFoundError as fnf_error:print(fnf_error)
finally:print('这句话,无论异常是否发生都会执行。')
19.3 抛出异常
Python 使用 raise 语句抛出一个指定的异常。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
raise [Exception [, args [, traceback]]]
如果只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
>>> try:raise NameError('HiThere') # 模拟一个异常。except NameError:print('An exception flew by!')raiseAn exception flew by!
Traceback (most recent call last):File "<stdin>", line 2, in ?
NameError: HiThere
19.4 用户自定义异常
可以通过继承 Exception 类来自定义异常类。大多数的异常的名字都以 “Error” 结尾,就跟标准的异常命名一样。
当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类:
class Error(Exception):"""Base class for exceptions in this module."""passclass InputError(Error):"""Exception raised for errors in the input.Attributes:expression -- input expression in which the error occurredmessage -- explanation of the error"""def __init__(self, expression, message):self.expression = expressionself.message = messageclass TransitionError(Error):"""Raised when an operation attempts a state transition that's notallowed.Attributes:previous -- state at beginning of transitionnext -- attempted new statemessage -- explanation of why the specific transition is not allowed"""def __init__(self, previous, next, message):self.previous = previousself.next = nextself.message = message
19.5 清理行为
19.5.1 定义清理行为
不管 try 子句里面有没有发生异常,finally 子句都会执行。如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。
19.5.2 预定义的清理行为
关键词 with 语句可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法。就算在处理过程中出问题了,文件总是会关闭。
19.5.3 with 关键字
Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。在处理文件对象时使用 with 关键字是一种很好的做法。
实例:
with open('./test_runoob.txt', 'w') as file:file.write('hello world !')
等效于:
file = open('./test_runoob.txt', 'w')
try:file.write('hello world')
finally:file.close()
with语句实现原理建立在上下文管理器之上。
相关文章:
菜鸟教程《Python 3 教程》笔记(19):错误与异常
菜鸟教程《Python 3 教程》笔记(19) 19 错误和异常19.1 assert(断言)19.2 异常处理19.2.1 try/except19.2.2 try/except...else19.2.3 try-finally 语句 19.3 抛出异常19.4 用户自定义异常19.5 清理行为19.5.1 定义清理行为19.5.2…...
空气净化器上亚马逊美国站需要办理什么认证?空气净化器UL867测试报告如何办理?
空气净化器又称“空气清洁器”、空气清新机、净化器,是指能够吸附、分解或转化各种空气污染物(一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等),有效提高空气清洁度的产品,主要分为家用 、商用…...
SpringBoot的测试方案
写完代码后,测试是必不可少的步骤,现在来介绍一下基于SpringBoot的测试方法。 基于SpringBoot框架写完相应功能的Controller之后,然后就可以测试功能是否正常,本博客列举MockMvc和RestTemplate两种方式来测试。 准备代码 实体类…...
华为OD机考算法题:字符串解密
目录 题目部分 解读与分析 代码实现 题目部分 题目字符串解密题目说明给定两个字符串string1和string2。 string1是一个被加扰的字符串。string1由小写英文字母(a~z)和数字字符(0~9)组成,而加扰字符串由0~9、a~f 组…...
unity 锚点设置
锚点聚合情况: 一个2d物体的位置 pos x pos y 是中心点相对于锚点的偏移量: 中心点就是位置。 按住shift 锚点和中心点都会被设置: 按住Alt: 同时按住shift和alt : 中心点 锚点 UI元素在对应的位置上。 锚点拉伸情况…...
Hadoop:HDFS--分布式文件存储系统
目录 HDFS的基础架构 VMware虚拟机部署HDFS集群 HDFS集群启停命令 HDFS Shell操作 hadoop 命令体系: 创建文件夹 -mkdir 查看目录内容 -ls 上传文件到hdfs -put 查看HDFS文件内容 -cat 下载HDFS文件 -get 复制HDFS文件 -cp 追加数据到HDFS文件中 -appendTo…...
自定义封装异步任务组件,实现FutureTask功能
FutureTask 在 JDK1.8 后的异步编排API中的CompletableFuture,提供了 异步任务的成功回调、异常回调。 public class FutureTaskTest {public static void main(String[] args) throws Exception {CompletableFuture<String> future CompletableFuture.sup…...
【区块链 | IPFS】IPFS节点搭建、文件上传、节点存储空间设置、节点上传文件chunk设置
一、创建ipfs节点 通过ipfs init在本地计算机建立一个IPFS节点 本文有些命令已经执行过了,就没有重新初始化。部分图片拷贝自先前文档,具体信息应以实物为准 ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2048-bit RSA keypair.…...
【autodesk】浏览器中渲染rvt模型
使用Forge完成渲染 Forge是什么 为什么能够渲染出来rvt模型 Forge是由Autodesk开发的一套云端开发平台和工具集。在Forge平台中,有一个名为"Model Derivative"的服务,它可以将包括RVT(Revit)在内的多种BIM(…...
Python超入门(1)__迅速上手操作掌握Python
# 1.第一个代码:输出语句 # 1.第一个代码:输出语句 print("My dogs name is Huppy!") print(o----) print( ||| ) print("*" * 10) """ 输出结果: My dogs name is Huppy! o----||| ********** "&…...
后端面试话术集锦第 十四 篇:go语言面试话术
这是后端面试集锦第十四篇博文——go语言面试话术❗❗❗ 1. go数组、切片、扩容 go的数组和切片都是用来存储相同类型的数据集合。 数组是存储固定大小的集合,且为值引用。 但切片是存储无固定大小的集合,且为引用类型。 切片有三个属性,分别为指向指针的数组array,数组…...
Oralce集群管理-19C RAC 私有网络调整为BOND1
1 尝试在线添加私有网络的新接口 是否成功。 使用oifcfg命令在线添加新的网卡接口,在还没有配置bond1的条件下 也是可以添加成功的。 [gridorcldb1 ~]$ oifcfg getif eno3 192.168.224.0 global public ens3f0 10.2.0.0 global cluster_interconnect,asm eno…...
洛谷 Array 数论
题目: 对于长度为n的数组A,A中只包含从1到n的整数(可重复)。如果A单调不上升或单调不下降,A就可称为美丽的。 找出在长度为n时,有几个美丽的A。 思路: 这是一道数论题。 我们先找找“单调不递…...
简明SQL条件查询指南:掌握WHERE实现数据筛选
条件查询是用于从数据库中根据特定条件筛选数据行的一种方式,它避免了检索整个表中的数据。通常,使用 WHERE 子句来定义过滤条件,只有符合这些条件的数据行才会被返回。 SQL中的运算符有:、!、<、> 等,用于进行…...
通过HbaseClient来写Phoenix表实现
由于数据存储在Hbase上,并且上层使用了Phoenix来读写数据。并且由于数据的列字段不固定,并且可能由于Hbase表列和Phoenix的表列字段不一致,使用Phoenix写入的数据会导致写出报错的问题出现。所以这里直接使用HbaseClient写入到Hbase表中&…...
uniapp qiun charts H5使用echarts的eopts配置不生效
原因是:使用web的要设置 echartsH5 :echartsH5"true" <template><view class"charts-box"><view class"chart-title"> 趋势</view><qiun-data-chartstype"column":eopts"eopts":cha…...
嵌入式Linux驱动开发(LCD屏幕专题)(三)
1. 硬件相关的操作 LCD驱动程序的核心就是: 分配fb_info设置fb_info注册fb_info硬件相关的设置 硬件相关的设置又可以分为3部分: 引脚设置时钟设置LCD控制器设置 2. 在设备树里指定LCD参数 framebuffer-mylcd {compatible "100ask,lcd_drv&qu…...
MySQL视图用户管理
文章目录 视图视图的规则用户用户信息创建用户删除用户修改密码 用户权限给用户授权回收权限 视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会…...
我发现了一个很好看的字体,霞鹜文楷!如何换windows和typora字体?
1、字体 官方地址如下,下载也很简单。 https://github.com/lxgw/LxgwWenKai 有1W多的stars。 方式: 直接打包下载。下载不来,可以联系我。 然后ttf的文件,全部安装就行了。 reg save "HKCU\Control Panel" .\res…...
微软8月系统更新引发问题:虚拟内存分页文件出现错误
微软的八月系统更新引发了一系列问题,其中包括“UNSUPPORTED_PROCESSOR”蓝屏错误和文件管理器故障。尽管微软已经修复了前者,但据国外科技媒体Windows Latest报道,仍有用户反馈在非微星设备上出现“fault in nonpaged area”蓝屏错误。 如果…...
“AI点单员”真的能替代人工吗?——基于237家门店AB测试的转化率、客单价、复购率三重数据验证(含原始数据集索引)
更多请点击: https://kaifayun.com 第一章:AI Agent餐饮行业应用 AI Agent正以前所未有的深度融入餐饮行业全链路,从智能点餐、后厨协同到供应链优化与顾客情感分析,其核心价值在于将静态规则系统升级为具备感知、推理与自主决策…...
微信小程序逆向工程:5步掌握wxappUnpacker核心技术与安全分析实战
微信小程序逆向工程:5步掌握wxappUnpacker核心技术与安全分析实战 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在当今移动应用生态中&#…...
YooAsset实战指南:Unity热更新架构重构与AB包管理
1. 为什么热更新不是“加个插件就能跑”,而是Unity项目上线前必须重做的一次架构手术 在Unity游戏开发里,"热更新"这三个字,听上去像是一键开启的魔法开关——版本发出去了,发现UI错位、数值写反、新活动脚本没加载&…...
XUnity Auto Translator:Unity游戏自动翻译的终极完整指南
XUnity Auto Translator:Unity游戏自动翻译的终极完整指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity Auto Translator是一款功能强大的开源游戏翻译工具,专为Unity引擎…...
Rust 语言特性:impl 与 方法
在其他语言里,我们通常不会特别区分“函数”和“方法”两个术语,特别是在 Java 这类纯面向对象编程语言里。因为“函数”和“方法”是一回事。在 C 里,情形稍有不同,因为它是面向对象和面向过程的多范式语言,即有独立存…...
Python:4 == 4.0 结果为True的原因
特殊情况:在 Python 中,整数和浮点数进行比较时,如果数值相等,则结果为 True。即 4 4.0 的结果是 True。如果两个对象代表相同的概念或数值,即使类型不同(如 int 和 float),也可能返…...
从‘微软 ORG’到流畅中文NLP:你的zh_core_web_sm模型真的装对了吗?
从‘微软 ORG’到流畅中文NLP:你的zh_core_web_sm模型真的装对了吗? 当你在Spacy中加载zh_core_web_sm模型,运行示例文本"微软准备用十亿美金买下这家英国的创业公司"后,看到"微软"被正确标记为ORG࿰…...
AI智能体安全防御:从代码数据分离到多代理系统架构实践
1. 项目概述:当AI智能体成为攻击目标 最近和几个做AI应用落地的朋友聊天,大家不约而同地提到了同一个焦虑:模型能力越强,系统越复杂,心里反而越没底。一个能自主调用API、处理文件、联网搜索的智能体,一旦被…...
装上这个技能,让你的 OpenClaw 和 Hermes 变身私人旅行规划师
一句话说清楚给小龙虾和马装上 Voyago,以后你只需要说"帮我规划杭州两天一夜",它就会自动帮你查火车票、搜机票、找酒店、查门票、规划路线、搜小红书攻略、算预算,最终输出一份万字级的完整旅行方案——精确到每两个地点之间坐几号…...
从‘指代消解’到‘看图说话’:手把手拆解Transformer解码器如何像人一样‘生成’内容
从‘指代消解’到‘看图说话’:拆解Transformer解码器的内容生成魔法 想象一下,当你看到一张照片——一只猫蹲在键盘上,爪子按着删除键。你会脱口而出:"它在删我的代码!"这个瞬间完成的"看图说话"…...
