Python - 异常处理
admin
2024-02-10 05:07:16
0

异常与错误的概念

错误:苹果内部坏了只能扔

没法通过其他的代码进行处理的问题
语法错误:比如 定义函数写成了 dfe xxx()
这种错误,直接通过IDE或者解释器给出的提示进行修改

逻辑错误:语法层面没有问题,但是自己设计的逻辑出现问题
例如: if age<18: print(‘已经成年’)
这种错误,IDE或者解释器无法帮我们检查出,只有通过代码测试进行排查

异常:苹果只是脏了,洗洗还能吃

程序在执行过程中,出现的未知错误;语法和逻辑都是正常的;可以通过其他代码进行处理修复

例如:想获取一个数字,但用户输入了字符
在x/y 中,输入的y为0

类型

除零异常
1/0
ZeroDivisionError

名称异常
print(name)
NameError

索引异常
a = [1,2]
a[3]
IndexError

键异常
dic = {‘name’:‘sz’}
dic[‘abd’]
KeyError

值异常
int(‘abc’)
ValueError

属性异常
name = ‘sz’
print(name.xx)
AttributeError

迭代器异常
it = ite([1,2])
print(next(it))
print(next(it))
print(next(it))
Stoplteration

系统异常类继承树
BaseExption 分为SystmExit KeyboardInter等等

异常:
系统一开始已经内置了一些应用场景,在我们写代码的过程中,一旦触发了这个场景,系统内部就会自动的向外界抛出这个问题,也就是我们所谓的异常

预防:添加容错代码,加if 判断一下

解决:有些场景无法语法,只能捕捉后处理掉,例子如下

try:print(name)
except NameError:print('名称有问题,请仔细检查')
#不会报错了,有输出

语法

try:可能会出现异常的代码
except 你要捕捉的异常1处理:对这个异常的处理
except 你要捕捉的异常2处理:对这个异常的处理
else:没出现异常时做的处理
finally:不管有没有出现异常,都会执行的代码
#else,finally这些词的顺序不可以变

当存在多次异常时,从上到下,捕捉到第一次异常后,就会往下匹配下去,不会多次检测

取别名

try:1/0
except ZeroDivisionError as ze:print('xxx',ze)
#输出:xxx division by zero

多个异常同时捕捉,用个元组

try:1/0#print(name)
except (ZeroDivisionError,NameError) as ze:print('xxx',ze)
#输出:xxx division by zerotry:#1/0print(name)
except (ZeroDivisionError,NameError) as ze:print('xxx',ze)
#输出:xxx name 'name' is not defined

如果异常名称不确定,又想捕捉,可以直接写Exception

try:1/0#print(name)
except Exception as ze:print('xxx',ze)
#输出:xxx division by zero

with语句

适用于某一段代码之前预处理,执行某段代码之后清理操作
无论这段代码有无异常,都能保证最后的清理操作得到执行

例子:读取文件
1,打开文件 2,读取文件 3,关闭文件
如果2出错,3不会执行,导致文件无法关闭

try:打开文件读取文件
finally:关闭文件
with open(file) as F:读取文件
#open 已经实习了打开与关闭
try:f = open('xx.jpg','r')f.readlines()
finally:print('xxx')f.close()with open('xx.jpg','r') as f:f.readlines()

上下管理器

上面与下面有一段固定代码

class Test:def __enter__(self):print('enter')def __exit__(self, exc_type, exc_val, exc_tb):print(self, exc_type, exc_val, exc_tb)print('exit')
with Test():print('body')输出:
enter
body
<__main__.Test object at 0x0000023E3C5CAFD0> None None None
exit
class Test:def __enter__(self):print('enter')return 'xxx'def __exit__(self, exc_type, exc_val, exc_tb):print(self, exc_type, exc_val, exc_tb)print('exit')with Test() as x:print('body',x)
#x输出上下管理器的返回值
#return self 时,返回 body <__main__.Test object at 0x0000023E3C5CAFD0>

contexlib模块

生成器变成了上下管理器

import contextlib
@contextlib.contextmanager
def test():print(1)yield 'xxx'print(2)
with test() as x:print(3,x)输出:
1
3 xxx
2

相关内容

热门资讯

黄红日就任民生银行首席合规官 上证报中国证券网讯(记者 张琼斯)民生银行5月8日发布的关于首席合规官任职资格获国家金融监督管理总局...
文化和旅游部公布2026年第二...   原标题:旅游市场强制消费问题典型案例(2026年第二批)   “纠治旅游行业导游乱象、强制消费等...
7室5厅6卫,恒大原总裁豪宅被... 近日,广州市天河区清风南街11号的一套428平方米复式楼,被广州天河区人民法院在阿里法拍网挂拍,起拍...
原创 6... 俄罗斯于5月9日在莫斯科红场举行的反法西斯战争胜利81周年阅兵仪式吸引了全球的目光。这不仅仅是一场军...
庆祝5·12国际护士节系列活动... 新闻 为庆祝5·12国际护士节,我院护理部组织各专业护理骨干开展系列护理健康科普义诊活动。 庆祝护士...
合肥贵金属回收商家深度测评:资... 一、行业背景与测评方法论 据《2025年中国二手奢侈品及贵金属回收市场白皮书》数据显示,2025年全...
2026国内正规现货黄金交易平... 步入2026年第二季度,全球货币政策的转向与地缘经济的重构,使得现货黄金的避险属性再度成为财富管理的...
原创 谁... 老清我最近翻了翻股市榜单,发现个挺有意思的事儿:中国最值钱的有色金属公司紫金矿业,巅峰时市值接近万亿...
伯希和更名奔赴自然,再战港股I... 亿欧获悉,5月8日,奔赴自然户外运动集团股份有限公司向港交所递交更新后的招股申请文件,中金公司、中信...
融资节奏提速,伟测科技从11.... 5月9日,伟测科技(688372)发布向不特定对象发行可转换公司债券预案。公司拟发行可转债总额不超过...
美银大幅修正预期:美联储不太可... 【美银大幅修正预期:美联储不太可能在2027年前降息】财联社5月9日电,根据美国银行的最新预测,美联...
阶跃星辰,融资25亿美元,拟提... 来源:瑞恩资本RyanbenCapital 综合消息,「AI六小虎」之一、国产大模型公司阶跃星辰(...
精准服务民营经济高质量发展,深... 深圳商报·读创客户端首席记者 王海荣 5月9日下午,深圳市2026年服务民营经济系列活动——“宝企金...
聚焦长时储能与全球化布局——海... 2026年5月7日上午,位于重庆铜梁的海辰储能基地迎来了一批来自全国各地的媒体。海辰储能联合创始人、...
李开复筹划赴港上市?大模型零一... 又一家国产大模型即将赴港IPO?5月9日,有消息称,李开复创办的零一万物正在进行Pre-IPO融资,...
原创 低... 2020 年开年,反垄断的矛头指向外卖行业,曾经风靡一时的奶茶零元购、百亿补贴,似乎正在成为历史。这...
无问芯穹再获超7亿融资 CEO... 雷递网 乐天 5月7日 无问芯穹今日宣布此前已再获超7亿元融资,联合领投方为杭州高新金投集团和惠远资...
原创 目... 对于高房价这个事情,这几年似乎很少人提了,过去大家都提到高房价是最强的避孕药! 对于这种说法,其实很...
突发!投资大佬,清仓式减持AI... 在“美股七姐妹”中,微软有一个独一无二的纪录:连续25年稳居标普500指数前十权重股。 如今,它却要...
CEO已癫!醉心造车的追觅:会... “这是抖音的极限,不是我的极限。”每天狂发75条短视频的追觅创始人俞浩,认为平台规则限制了他的发挥。...