标签:处理 except try python lst error print 异常
认识异常处理
# ### 异常处理 # IndexError 索引超出序列的范围 # lst = [1,2,3] # lst[1000] # KeyError 字典中查找一个不存在的关键字 # dic = {"a":1,"b":2} # dic["c"] # NameError 尝试访问一个不存在的变量 # print(wangwen112312313123123123123123123123123123s) # IndentationError 缩进错误 # if 5 == 5: # print(1) # print(2) # AttributeError 尝试访问未知的对象属性 # class MyClass(): # a = 100 # obj = MyClass() # obj.abc # StopIteration 迭代器没有更多的值 # it = iter(range(3)) # res = next(it) # res = next(it) # res = next(it) # res = next(it) # AssertionError 断言语句(assert)失败 """assert猜的意思 , 叫断言, 如果是正确的没有任何反应,代码正常执行 如果是错误的直接报错,终止程序 """ # assert 5 < 3 # print(111)
异常处理的语法
try .. except .. 来抑制错误
把又可能报错的代码放到try这个代码块当中,
如果有报错,直接执行except这个代码块
如果没有报错,不执行except这个代码块
在异常处理当中,所有的异常错误类都继承 BaseException Exception 普通异常的父类(了解)
# 类型上的子父关系
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.abc() except IndexError: print("下标越界1") except KeyError: print("字典的键不存在2") except NameError: print("这个变量不存在的3") except : print("有异常错误4")
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这个代码块当中没有报错的时候,执行else这个分支 如果try代码块有报错,就不执行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(234678) """ """3.try .. except .. else .. finally .. """ try: lst = [1,2,3] lst[1000] # print(123) except: print(456) else: print("执行了else分支 ... ") finally: print("执行关闭数据库操作")
主动抛出异常
BaseException 所有异常类的父类
Exception 普通异常类的父类
raise + 异常错误类 / 异常错误类对象
# (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)View Code
获取错误行号和文件名
#系统底层获取行数和文件名的函数( 只有在程序异常时才能触发 ) 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 #返回文件名View Code
异常的分类
1 IndexError 索引超出序列的范围 2 KeyError 字典中查找一个不存在的关键字 3 NameError 尝试访问一个不存在的变量 4 IndentationError 缩进错误 5 AttributeError 尝试访问未知的对象属性 6 StopIteration 迭代器没有更多的值 7 AssertionError 断言语句(assert)失败 8 EOFError 用户输入文件末尾标志EOF(Ctrl+d) 9 FloatingPointError 浮点计算错误 10 GeneratorExit generator.close()方法被调用的时候 11 ImportError 导入模块失败的时候 12 KeyboardInterrupt 用户输入中断键(Ctrl+c) 13 MemoryError 内存溢出(可通过删除对象释放内存) 14 NotImplementedError 尚未实现的方法 15 OSError 操作系统产生的异常(例如打开一个不存在的文件) 16 OverflowError 数值运算超出最大限制 17 ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象 18 RuntimeError 一般的运行时错误 19 SyntaxError Python的语法错误 20 TabError Tab和空格混合使用 21 SystemError Python编译器系统错误 22 SystemExit Python编译器进程被关闭 23 TypeError 不同类型间的无效操作 24 UnboundLocalError 访问一个未初始化的本地变量(NameError的子类) 25 UnicodeError Unicode相关的错误(ValueError的子类) 26 UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类) 27 UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类) 28 UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类) 29 ValueError 传入无效的参数 30 ZeroDivisionError 除数为零
标签:处理,except,try,python,lst,error,print,异常 来源: https://www.cnblogs.com/shuaiyao666/p/16079916.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。