异常处理
# 异常处理 # 常见异常 # SyntaxError 语法错误 # AttributeError 试图访问一个对象没有的属性 # IOError 输入/输出异常;基本上是无法打开文件 # ImportError 无法引入模块或包;基本上是路径问题或名称错误 # IndentationError 语法错误的子类;代码没有正确对齐 # IndexError 下标索引超出序列边界 # KeyError 试图访问字典中不存在的key # KeyboardInterrupt Ctrl+c被按下 # NameError 使用一个还未被赋予对象的变量 # TypeError 传入的对象类型与要求不符合 # UnboundLocalError 试图访问一个还未被设置的局部变量 ,基本上是由于有另一个同名的全局变量,导致你以为正在访问它 # ValueError 传入一个调用者不期望的值,即使值的类型是正确的 # 异常处理的基本语法 # try: # 被检测的代码块 # except 异常类型: # 异常类型与异常一样,就执行这个位置的逻辑 # except 异常类型: 上面的异常类型没有再找这里的异常类型 # 异常类型与异常一样,就执行这个位置的逻辑 # …… # else: # 当try内代码没有异常时会执行这个位置的逻辑 # finally: # 无论异常与否,都会执行这个位置的逻辑 s1 = 'hello' try: int(s1) except IndexError as e: print(e) except ValueError as e: print(e) except TypeError as e: print(e) # 万能异常类型 Exception s1 = 'hello' try: int(s1) except Exception as e: print(e) # 主动触发异常 try: raise TypeError('类型错误') except Exception as e: print(e) # 自定义异常 class MyException(BaseException): # 自定义异常必须继承BaseException类 def __init__(self, msg): self.msg = msg try: raise MyException('自定义异常') except MyException as e: print(e) # 断言 在程序的某个位置判断一下结果是不是想要的值,如果不是想要的值就抛出一个异常 assert 1 == 1 # 有点类似于if,如果等式成立,执行它下面的代码 # assert 1 == 2 # 如果等式不成立,抛出一个AssertionError的异常