# 异常处理,英文名为exceptionalhandling,是代替日渐衰落的errorcode方法的新法,提供errorcode所未能具体的优势。 # 异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。 # 异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。 # 异常处理使用try、catch和finally关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。
# python的运行时错误称作异常 # (1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 # (2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成、计算或者输出结果需要的过程无法执行等 # # python异常是一个对象,表示错误或意外情况 # (1)在python检测到一个错误时,将触发一个异常 # python可以通常异常传导机制传递一个异常对象,发出一个异常情况出现的信号 # 程序员也可以在代码中手动触发异常 # (2)python异常也可以理解为:程序出现了错误而在正常控制流以外采取的行为 # 第一阶段:解释器触发异常,此时当前程序流将被打断 # 第二阶段:异常处理,如忽略非致命错误、减轻错误带来的影响等 # # 检测和处理异常: # (1)异常通过try语句来检测 # 任何在try语句块里的代码都会被检测,以检查有无异常发生 # (2)try语句主要有两种形式: # try-except: 检测和处理异常 # 可以有多个except # 支持使用else子句处理没有探测异常的执行的代码 # try-finally: 仅检查异常并做一些必要的清理工作 # 仅能有一个finally # (3)try语句的复合形式: # try-execpt-else-finally
# python 中的异常种类。 # AssertionError: 断言语句失败 # AttributeError: 属性引用或赋值失败 # FloatingPointError: 浮点型运算失败 # IOError: I/O操作失败 # ImportError: import语句不能找到要导入的模块,或者不能找到该模块特别请求的名称 # IndentationError: 解析器遇到了一个由于错误的缩进而引发的语法错误 # IndexError: 用来索引序列的证书超出了范围 # KeyError: 用来索引映射的键不再映射中 # keyboardInterrupt: 用户按了中断键(Ctrl+c,Ctrl+Break或Delete键) # MemoryError: 运算耗尽内存 # NameError: 引用了一个不存在的变量名 # NotImplementedError: 由抽象基类引发的异常,用于指示一个具体的子类必须覆盖一个方法 # OSError: 由模块os中的函数引发的异常,用来指示平台相关的错误 # OverflowError: 整数运算的结果太大导致溢出 # SyntaxError: 语法错误 # SystemError: python本身或某些扩展模块中的内部错误 # TypeError:对某对象执行了不支持的操作 # UnboundLocalError:引用未绑定值的本地变量 # UnicodeError:在Unicode的字符串之间进行转换时发生的错误 # ValueError:应用于某个对象的操作或函数,这个对象具有正确的类型,但确有不适当的值 # WindowsError:模块os中的函数引发的异常,用来指示与WIndows相关的错误 # ZeroDivisionError: 除数为0
# 异常代码块。 try: # 主代码块 # 主动触发错误.... raise Exception('错误了。。。') except Exception as e: # 异常时,执行该块 pass finally: # 无论异常与否,最终执行该块 pass
练习:
name = {} lists = [1,2] try: open('ddd.txt') except FileNotFoundError as e: print(e) try: t1 = name['index'] except KeyError as e1: print(e1) try: lists[3] except IndexError as e2: print(e2) # [Errno 2] No such file or directory: 'ddd.txt' # 'index' # list index out of range
自定义异常
# 自定义异常... class DouFuException(Exception): """定义异常类""" def __init__(self,message): self.message = message def __str__(self): return self.message try: # 主动触发异常拉 raise DouFuException('服务器连接失败...') except DouFuException as e: print(e) # 服务器连接失败...