Python科学计算第六章 异常处理结构

发布时间:2026/7/18 4:24:35
Python科学计算第六章 异常处理结构 常见异常类型ValueError值异常参数类型正确但值不合理特别是类型转换时例如int(abc)TypeError类型异常对不支持该操作的对象进行操作时例如对元组进行下标赋值、对非可调用对象加括号调用等NameError变量名异常引用未定义变量时IndexError索引异常索引越界时ZeroDivisionError零除数异常除数为0时try-except-else-finally 结构1. try与excepttry尝试执行except 异常类型名或异常类型名元组一旦try中发生异常立即停止try语句块并从上到下检测发生的错误类型在哪个except接收执行对应语句块由于各except从上往下依次判断应该把具体的、需要优先拦截的异常放在前面较为宽泛的放在后面。父类写在前面会拦截子类导致子类永远无法被捕获except 异常类型名: # 捕获该异常except 异常类型名元组: # 捕获元组中的异常except: # 捕获所有异常不推荐因其捕获SystemExit、KeyboardInterruptexcept exception: # 捕获除SystemExit、KeyboardInterrupt外的所有异常# 示例 try: # try语句块 print(执行try语句块) except ValueError: # except语句块1 print(执行except语句块1) # try中报ValueError则执行语句块1 except IndexError: # except语句块2 print(执行except语句块2) # try中报IndexError则执行语句块2 except (TypeError, NameError): # except语句块3 print(执行except语句块3) # try中报TypeError或NameError则执行语句块3若想在捕获异常时获取异常对象则可以为其命名并存为变量try: x int(abc) except ValueError as e: print(e) invalid literal for int() with base 10: abc 2. else与finallyelsetry不报错则执行finally必定执行若在函数中即使前序语句执行了returnfinally的语句也必定会再执行若此时finally中有return则会覆盖前序return。故不建议再finally中使用return流程执行try若try中报错except语句接收到对应报错-except对应语句执行-else不执行-finally执行若try中没有报错except不执行-else执行-finally执行# 示例 try: # try语句块 print(执行try语句块) except ValueError: # except语句块1 print(执行except语句块1) # try中报ValueError则执行语句块1 except IndexError: # except语句块2 print(执行except语句块2) # try中报IndexError则执行语句块2 except (TypeError, NameError): # except语句块3 print(执行except语句块3) # try中报TypeError或NameError则执行语句块3 else: else语句块 print( 执行else语句块) # try中不报错则执行 finally: # finally语句块 print( 执行finally语句块) # 必定最后执行try-except可以嵌套3. 综合示例# 示例 for i in range(5): try: # try语句块 print(f第{i}次循环) print( 执行try语句块) if i 1: lst [1, 2, 3] a lst[3] # 索引越界报IndexError elif i 2: a b # b为未定义变量报NameError elif i 3: a int(abc) # 字符串转int但值不合理报ValueError elif i 4: a tuple([1, 2, 3]) tuple[0] 1 # 元组类型不支持下标修改元素报TypeError except ValueError: # except ValueError语句块 print( 执行except ValueError语句块) # try中报ValueError则执行 except IndexError: # except IndexError语句块 print( 执行except IndexError语句块) # try中报IndexError则执行 except (TypeError, NameError): # except (TypeError, NameError)语句块 print( 执行except (TypeError, NameError)语句块) # try中报TypeError或NameError则执行 else: # else语句块 print( 执行else语句块) # try中不报错则执行 finally: # finally语句块 print( 执行finally语句块) # 必定最后执行 运行结果 第0次循环 执行try语句块 执行else语句块 执行finally语句块 第1次循环 执行try语句块 执行except IndexError语句块 执行finally语句块 第2次循环 执行try语句块 执行except (TypeError, NameError)语句块 执行finally语句块 第3次循环 执行try语句块 执行except ValueError语句块 执行finally语句块 第4次循环 执行try语句块 执行except (TypeError, NameError)语句块 执行finally语句块 可见上述各语句的特点if-raise 抛出异常if 条件表达式:raise 异常名(提示信息字符串)# 示例 a, b map(int, input().split()) if a b: raise ValueError(输入的a小于b) 输入1 5 Traceback (most recent call last): File ***.py, line 8, in module raise ValueError(输入的a小于b) ValueError: 输入的a小于b 断言assert 条件表达式assert 条件表达式, 提示信息字符串在条件表达式不满足时抛出断言异常AssertionError# 示例 a, b map(int, input().split()) assert a b, a应该大于b但不满足预期 Traceback (most recent call last): File ***.py, line 3, in module assert a b, a应该大于b但不满足预期 ^^^^^ AssertionError: a应该大于b但不满足预期