一. python错误处理
一. 错误处理
异常处理 捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。 如果你不想在异常发生时结束你的程序,只需在try里捕获它。
格式: try : 语句1 except 错误代码 as e: 语句2 except 错误代码 as e: 语句3 ...... except 错误代码 as e: 语句n else: 语句e
注意 else 可有可无 作用: 用来检测try 语句块的错误 从而让except语句捕获异常信息并处理 逻辑: 当程序执行到try ---except --else 语句时 1 如果try 语句1 执行出现错误 会匹配第一个错误码 如果匹配上就执行 语句 2 如果当try 语句1 执行出现错误 没有匹配的异常 错误将会 被提交到上一层的try 语句 或者到程序的最上一层 3 如果当try 语句1 执行没有出现错误 执行else 下的语句e
try: print(3/1) except NameError as e: print("没有改变量") except ZeroDivisionError as e: print("除数为0") else: print("代码没有问题了") print(".....................................") # 使用except 而不使用 任何的错误类型 try: print(4/0) print(num) except: print("程序出现了异常") # 使用except带有多种异常 try: print(5/0) except(NameError,ZeroDivisionError) print("出现了NameError或‘ZeroDivisionError")
以上例子不管 try 子句里面有没有发生异常,finally 子句都会执行。 如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出, 而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出。 下面是一个更加复杂的例子(在同一个 try 语句里包含 except 和 finally 子句): 格式: try : 语句1 except 错误代码 as e: 语句2 except 错误代码 as e: 语句3 ...... except 错误代码 as e: 语句n finally: 语句f 作用 :语句t无论是否有错误 都讲执行最后的语句f try: print(1/0) finally: print("必须执行我")
# Exception 万能异常处理 try: print("1") 1/0 name 2+'3' []['K'] except Exception: print("错了")
异常名称 描述 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 用户代码生成的警告
"" try: print(3/1) except NameError as e: print("没有改变量") except ZeroDivisionError as e: print("除数为0") else: print("代码没有问题了") print(".....................................") # 使用except 而不使用 任何的错误类型 try: print(4/0) print(num) except: print("程序出现了异常") # 使用except带有多种异常 try: print(5/0) except(NameError,ZeroDivisionError): print("出现了NameError或‘ZeroDivisionError")