1、异常
了解异常前,首先是区分「语法错误」与「运行时异常」,语法错误是连编译器都过不了的错误,比如if语句后面漏掉了冒号(:),程序跑都跑不起来;运行错误则是程序跑起来后,因为程序的业务逻辑问题引起的程序崩溃,比如除以0。
① Python中的常见异常
Exception类
因为是 所有异常类的父类
,又称 万能异常
,可以捕获任何异常!Python中常见的异常如下表所示:
异常 | 描述信息 |
AssertionError | 断言语句失败 |
AttributeError | 尝试访问未知的对象属性 |
IndexError | 索引超出序列的范围 |
keyError | 字典中查找一个不存在的Key |
NameError | 尝试访问一个不存在的变量 |
OSError | 操作系统产生的异常,比如FileNotFoundError |
SyntaxError | Python语法错误 |
TypeError | 不同类型间的无效操作 |
ZeroDivisionError | 除数为0 |
IOError | 输入输出错误 |
ValueError | 函数传参类型错误 |
② 异常捕获
Python中为我们提供了两组语句用于异常捕获,try-expect-else
和try-finally
。下面讲解下六种常见的玩法:
「1. try捕获了任何异常,直接丢给except后的代码块处理」,代码示例如下:
try: result = 1 / 0 except: print("捕获到异常了!")
运行结果如下:
捕获到异常了!
「2. 捕获特定类型」,代码示例如下:
try: result = 1 / 0 except ZeroDivisionError: print("捕获到除数为零的错误")
运行结果如下:
捕获到除数为零的错误
「3. 针对不同的异常设置多个except」,代码示例如下
运行结果如下:
try: sum = 1 + '2' result = 1 / 0 except TypeError as reason: print("类型出错:" + str(reason)) except ZeroDivisionError as reason: print("除数为0:" + str(reason))
运行结果如下:
类型出错:unsupported operand type(s) for +: 'int' and 'str'
「4. 对多个异常统一处理」,代码示例如下:
try: result = 1 / 0 sum = 1 + '2' except (TypeError, ZeroDivisionError) as reason: print(str(reason))
运行结果如下:
division by zero
「5. 当没有检测到异常时才执行的代码块,可以用else」,代码示例如下:
try: result = 4 / 2 except ZeroDivisionError as reason: print(str(reason)) else: print("没有发生异常,输出结果:%d" % result)
运行结果如下:
没有发生异常,输出结果:2
「6. 无论是否发生异常都会执行的一段代码块」,代码示例如下:
try: result = 4 / 2 except ZeroDivisionError as reason: print(str(reason)) else: print("没有发生异常,输出结果:%d" % result) finally: print("无论是否发生异常都会执行~")
运行结果如下:
没有发生异常,输出结果:2 无论是否发生异常都会执行。