python异常处理
异常处理异常和错误程序中错误分类1.语法错误(程序执行前改正) 2.逻辑错误 什么是异常?异常就是程序运行时发生错误的信号 python中常见的异常种类在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误。 AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError # 输入/输出异常;基本上是无法打开文件 ImportError # 无法引入模块或包;基本上是路径问题或名称错误 IndentationError # 语法错误(的子类) ;代码没有正确对齐 IndexError # 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError # 试图访问字典里不存在的键 KeyboardInterrupt # Ctrl+C被按下 NameError # 使用一个还未被赋予对象的变量 SyntaxError # Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError # 传入对象类型与要求的不符合 UnboundLocalError # 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError # 传入一个调用者不期望的值,即使值的类型是正确的 ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError 异常处理什么是异常?异常发生之后,异常之后的代码就不执行了 什么是异常处理?python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 为什么要进行异常处理?增强你程序的鲁棒性与容错性 如何进行异常处理?这里指的异常由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正 异常处理的两种方式: 1.if判断式 2.python专有异常处理 if判断式总结: 1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。 2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差 3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。 python专有异常处理python:为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理 1.基本语法:# 异常捕获基本格式: try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑 f = open('1.txt') g = (line.strip() for line in f) try: for i in g: print(i) except StopIteration: f.close() 2.异常类只能用于处理指定的异常情况s1 = 'hello' try: int(s1) except IndexError as e: print(e) # 未捕获到异常,程序直接报错 3.处理多分支s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) 4.万能异常:Exception利用万能异常定制不同逻辑: def func(): print(111) def func1(): print(222) dic = {1:func,2:func1} while True: try: user = int(input('请输入数字:')) dic[user]() break except ValueError: print("请输入数字") except KeyError: print("不在索引之内") except Exception: print("意外错误") 5.异常的其他机构try else finally try: dic = {'name':"alex"} print(dic['age']) l1 = [1,2,3] print(l1[100]) except KeyError: print("没有此键") except IndexError: print("没有此下标") else: print("如果没有出现异常则执行这里") finally: print('finally 666') 总结: ? 1.except 必须依赖于try,else必须依赖于except和try ? 2.finally只是依赖于try. ? 3.finally : 在异常出现之前,执行finally语句(异常捕获不算错误) ? 4.finally 用在 关闭数据库连接,文件句柄关闭,数据保存等,用到finally. def func(): try: print(111) return 666 finally: print(222) print(func()) 6.主动触发异常class A: def func(self): raise Exception("使用父类方法") class B(A): def func(self): print("in B func") class C(A): def func(self): print("in C func") class D(A): def func1(self): print("in D func1") def function(obj): obj.func() obj1 = D() function(obj1) # 结果: Exception: 使用父类方法 try: raise TypeError('类型错误') except Exception as e: print(e) 7.自定义异常class EvaException(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return self.msg try: raise EvaException("类型错误") except EvaException as e: print(e) 8.断言断言: 展现出一种强硬的态度,若条件不成立,立马报错,结束下面的执行语句 # assert 条件 assert 1 == 1 assert 1 == 2 9.try..except的方式比较if的方式的好处? 1.改善代码容错性 ? 2.增强程序鲁棒性 10.万能异常与多分支的比较什么时候用万能? 什么时候用多分支? ? 如果你对错误信息不关心,只是想要排除错误让程序继续运行. 用万能异常. ? 你对错误信息要进行明确的分流,让你的程序多元化开发. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |