异常处理
什么是异常?
异常发生之后在他后面的代码就不执行了。
为什么要进行异常处理?
不处理你的程序还怎么运行?
异常处理的方法:
1,使用if判断语句

1 num1=input('>>: ') #输入一个字符串试试 2 int(num1)

1 num1=input('>>: ') #输入一个字符串试试 2 if num1.isdigit(): 3 int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴 4 elif num1.isspace(): 5 print('输入的是空格,就执行我这里的逻辑') 6 elif len(num1) == 0: 7 print('输入的是空,就执行我这里的逻辑') 8 else: 9 print('其他情情况,执行我这里的逻辑') 10 11 ''' 12 问题一: 13 使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂 14 问题二: 15 这只是我们代码中的一个小逻辑,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。 16 '''
总结:
1、if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要重复的if来进行处理。
2、在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差
3、if是可以解决异常的,只是存在1、2的问题,所以,千万不要妄下定论if不能用来异常处理

1 def test(): 2 print('test running') 3 choice_dic={ 4 '1':test 5 } 6 while True: 7 choice=input('>>: ').strip() 8 if not choice or choice not in choice_dic:continue #这便是一种异常处理机制啊 9 choice_dic[choice]()
Python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理
基本语法:
1 2 3 4 | try : 被检测的代码块 except 异常类型: try 中一旦检测到异常,就执行这个位置的逻辑 |

1 f = open('a.txt') 2 g = (line.strip() for line in f) 3 for line in g: 4 print(line) 5 else: 6 f.close()

1 try: 2 f = open('a.txt') 3 g = (line.strip() for line in f) 4 print(next(g)) 5 print(next(g)) 6 print(next(g)) 7 print(next(g)) 8 print(next(g)) 9 except StopIteration: 10 f.close() 11 ''' 12 next(g)会触发迭代f,依次next(g)就可以读取文件的一行行内容,无论文件a.txt有多大,同一时刻内存中只有一行内容。 13 提示:g是基于文件句柄f而存在的,因而只能在next(g)抛出异常StopIteration后才可以执行f.close() 14 '''
异常类智能用来处理指定的异常情况,如果非指定类则无法处理,报错

1 s1 = 'hello' 2 try: 3 int(s1) 4 except IndexError as e: 5 print(e) 6 '''ValueError写为IndexError,错误'''
多分枝:一个try里可以有多个except;
万能异常:Exception-----------可以捕获任意异常
try......except 中的else语句,在try代码块内没有异常则执行
finally 语句,无论有没有异常都执行

1 #主动触发异常 2 try: 3 raise TypeError('类型错误') 4 except Exception as e: 5 print(e)

1 #自定义异常 2 class EvaException(BaseException): 3 def __init__(self,msg): 4 self.msg=msg 5 def __str__(self): 6 return self.msg 7 try: 8 raise EvaException('类型错误') 9 except EvaException as e: 10 print(e)
断言(assert)+判断,正确执行下边的,错误从该位置终止程序。
本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/7382243.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)