Python 异常处理方法try&except
2018-10-26 11:51
471 查看
Python 异常处理
python提供了异常处理工具来处理python程序在运行中出现的异常和错误。也可以使用该功能来调试python程序。
- 相关概念:
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
python标准异常的异常名称 及描述:
异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError 断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) UnboundLocalError 访问未初始化的本地变量 ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象 RuntimeError 一般的运行时错误 NotImplementedError 尚未实现的方法 SyntaxError Python 语法错误 IndentationError 缩进错误 TabError Tab 和空格混用 SystemError 一般的解释器系统错误 TypeError 对类型无效的操作 ValueError 传入无效的参数 UnicodeError Unicode 相关的错误 UnicodeDecodeError Unicode 解码时的错误 UnicodeEncodeError Unicode 编码时错误 UnicodeTranslateError Unicode 转换时错误 Warning 警告的基类 DeprecationWarning 关于被弃用的特征的警告 FutureWarning 关于构造将来语义会有改变的警告 OverflowWarning 旧的关于自动提升为长整型(long)的警告 PendingDeprecationWarning 关于特性将会被废弃的警告 RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告
常见异常总结归类:
-
错误:程序运行之前的语法问题,如:关键字、缩进、括号不成对等
-
异常:在程序运行过程中出现的问题,如:未定义变量、除数为0、属性不存在等
-
异常处理
说明:异常处理可以理解为特殊的流程控制语句,可以提高代码的健壮性。
异常语法:
try: print('正常代码') # print(a) 3/0 except Exception as e: # Exception 是所有异常的基类,此处可以捕获所有的异常 print('出现异常') print(e) print('其他内容')
多个异常
# 分类捕获异常
try: # print(a) # 3/0 d = {} print(d['name']) except NameError as e: print('NameError:', e) except ZeroDivisionError as e: print('ZeroDivisionError:', e) except Exception as e: print('OtherError:', e) try: # print(a) # 3/0 fp = open('123.txt') except (NameError, ZeroDivisionError) as e: # 将某些异常进行统一处理,写在一个元组中即可 print(e) except: print('其他异常')
完整结构(else-finally)
try: print('正常代码') print(a) except: # 出现异常时执行 print('出现异常') else: # 正常结束(没有异常)时会执行 print('正常结束') finally: # 无论有无异常,都会执行 print('最后执行') else:正常结束时执行else中的代码
finally:无论有无异常,最后都执行
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
抛出异常:raise
try: print('正常代码') # 根据业务逻辑的需要,手动抛出异常 raise Exception('手动抛出的异常') except Exception as e: print('异常:', e) print('OVER')
异常嵌套(try-except结构中再次使用try-except结构)
print('我要去上班,什么事也阻止不了我上班的脚步') try: print('我准备骑电动车') raise Exception('昨天晚上不知道哪个缺德的家伙把我充电器拔了') print('骑车提前到达公司') except Exception as e: print(e) try: print('我准备做公交车') raise Exception('等了20分钟一直没有公交车,果断放弃') print('坐公交车准时到达公司') except Exception as e: print(e) print('我准备打车') print('打车还是快,一会就到达公司') print('热情满满的开始一天的工作')
-
自定义异常类(需要继承自官方的异常基类Exception)
# 自定义异常类class MyException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg # 特定异常标准处理方案 def deal(self): print('处理特定的自定义异常') try: print('正常执行') # 手动抛出自定义异常 raise MyException('出现了自定义异常') except MyException as e: print(e) # 调用方法,处理异常 e.deal()
-
特殊场景
当我们进行文件操作时,无论过程中是否有异常,最终我们一定得进行关闭操作
-
使用with语句,可以保证文件的关闭,无论中间过程是否出现异常
# fp = open('test.txt', 'r') # 中间无论有无异常,最后一定得关闭文件 # fp.close() with open('test.txt', 'r') as fp: content = fp.read(5) print(content) # 此处不要考虑文件的关闭问题,也不用是否有异常
熟练使用此工具,顺利成为调bug小能手!
阅读更多相关文章推荐
- Python学习笔记之错误处理(关键词:错误处理、异常机制、try、except、else、finally、raise)
- python基础知识三——try与except处理异常语句
- (Python)异常处理try...except、raise
- python中的异常处理:try...except...else...finally语句
- (Python)异常处理try...except、raise
- Python异常处理try...except...finally raise assert
- python中用try来处理程序异常的集中常用方法
- python try except, 异常处理
- (Python)异常处理try...except、raise
- Python异常处理try...except、raise
- python中的异常处理 try..except
- Python异常处理——try...except、主动引发异常(raise)、断言(assert)
- Python中的异常处理: try-except-else-finally
- Python_异常处理try...except、raise
- python 异常处理-try-except-else-finally
- python try...except....else...finally处理异常
- python异常处理try...except
- python 对异常的处理(try...finally...和with 方法)- 千月的python linux 系统管理指南学习笔记(15)
- Python异常处理try...except、raise
- (Python)异常处理try...except、raise