Python的异常处理

Python的异常处理Python 的异常处理 python 异常处理

大家好,欢迎来到IT知识分享网。

文章目录

异常处理

异常的分类

1、IndexError 索引超出序列的范围

lst = [1,2,3] lst[1000]  
 

2、KeyError 字典中查找一个不存在的关键字

dic = { 
   "a":1,"b":2} dic["c"]  
 
  • 1
  • 2

在这里插入图片描述

3、NameError 尝试访问一个不存在的变量

print(jingtian123s)  
 

在这里插入图片描述

4、IndentationError 缩进错误

if 5 == 5: 

print(2)

在这里插入图片描述

5、AttributeError 尝试访问未知的对象属性

class MyClass(): a = 100 obj = MyClass() obj.abc  
 

在这里插入图片描述

6、StopIteration 迭代器没有更多的值

it = iter(range(3)) res = next(it) res = next(it) res = next(it) res = next(it)  
 

在这里插入图片描述

7、AssertionError 断言语句(assert)失败

assert 5 < 3 print(111)  
 

异常处理的语法

#类型上的子父关系

from collections import Iterator,Iterable print(issubclass(Iterator, Iterable))  
 

1.基本语法

class MyClass(): a = 6 

try:
lst = [1,2,3]
lst[1000]
except:
pass



try:
lst = [1,2,3]
lst[1000]
except BaseException:
pass



运行

运行

解决办法,指明具体异常类

2.带有分支的异常处理

try: # lst = [1,2,3] # lst[1000] 

# dic = {“a”:1,“b”:2}
# dic[“c”]

# print(lisi)

MyClass<span class="token punctuation">.</span>abc<span class="token punctuation">(</span><span class="token punctuation">)</span> 

except IndexError:
print(“下标越界1”)
except KeyError:
print(“字典的键不存在2”)
except NameError:
print(“这个变量不存在的3”)
except :
print(“有异常错误4”)






运行

运行

当有多个异常分支时,执行try中的代码,遇到异常,根据异常类型,执行相应except中的代码,后续代码不再执行

在这里插入图片描述

3.处理生成器的异常报错

def mygen(): yield 1 yield 2 yield 3 return [1,2,3] 

try:
gen = mygen()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))




# 给StopIteration这个类创建出来的对象起一个别名叫e
“””
当你打印对象时,会触发内部__str__方法,通过一些列的调用,返回出最后的返回值
“””


except StopIteration as e:
# 可以获取返回值
print(e)



“””
# 额外的扩展
res = str(e)
print(res , type(res) , “<======>”)
res2 = eval(res)
print(res2,type(res2))
“””





运行

运行

在这里插入图片描述

4.异常处理的其他写法

1 .try … except … else …
try: # lst = [1,2,3] # lst[1000] print(123) except: pass else: print("执行了else分支 ... ")  
 
运行
运行
2.try … finally … 无论代码是否报错,都必须要执行的代码写在finally这个代码块当中

场景:应用在异常环境下, 保存数据或者关闭数据库等操作, 必须要在数据库程序崩溃之前执行的代码写在finally代码块中;

try: lst = [1,2,3] lst[1000] finally: print()  
 
3.try … except … else … finally …
try: lst = [1,2,3] lst[1000] # print(123) 

except:
print(456)

else:
print(“执行了else分支 … “)
finally:
print(“执行关闭数据库操作”)


运行

运行

主动抛异常

(1) raise 基本语法

raise KeyError raise KeyError() #括号中跟描述信息  
 

在这里插入图片描述

try: raise except: pass 

try:
raise
except BaseException:
pass


运行

运行

(2) 自定义异常错误类

必须继承异常类的父类 BaseException

# return_errorinfo必须在报错的情况下才能触发内部相应方法获取当前行号和文件名 def return_errorinfo(n): import sys f = sys.exc_info()[2].tb_frame.f_back if n == 1: return str(f.f_lineno) #返回当前行数 elif n == 2: return f.f_code.co_filename #返回文件名  

# 通过主动抛出异常,来获取响应的数据
def get_info(n):
try:
raise
except:
return return_errorinfo(n)




# 自定义异常错误类
class MyException(BaseException):
def init(self,error_num,error_msg,error_filename,error_linenum):
self.error_num = error_num
self.error_msg = error_msg
self.error_filename = error_filename
self.error_linenum = error_linenum





eye = “轮回眼”
try:
if eye == “轮回眼”:
raise MyException( 404,“人类没有轮回眼”,get_info(2) , get_info(1) )


except MyException as e: # 给自定义MyException异常类的对象起个别名叫做e
print(e.error_num)
print(e.error_msg)
print(e.error_filename)
print(e.error_linenum)



运行

运行

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119644.html

(0)
上一篇 2025-11-04 07:15
下一篇 2025-11-04 07:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信