大家好,欢迎来到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








