Python的异样解决机制

解决异样的几种代码构造:

try...except...else构造

如果try代码块内没有抛出异样,执行else代码块,否则执行except代码块。

graph TD    A(try) -->|程序产生异样|B(except)    A(try) -->|程序没有异样|C(else)
try:    n1 = int(input('请输出一个整数:'))    n2 = int(input('请输出另一个整数:'))    result = n1 / n2except BaseException as e:    print('代码出错')    print(e)else:    print('后果为:', result)

try...except...else...finally构造

如果try代码块内没有抛出异样,执行else代码块,否则执行except代码块。finally代码块无论是否产生异样都会执行,罕用来开释try块中申请的资源。

graph TD    A(try) -->|程序产生异样|B(except)    A(try) -->|程序没有异样|C(else)    B --> D{finally}    C -->D{finally}
try:    n1 = int(input('请输出一个整数:'))    n2 = int(input('请输出另一个整数:'))    result = n1 / n2except BaseException as e:    print('代码出错')    print(e)else:    print('后果为:', result)finally:    print('任何状况都会执行')print('程序完结')

运行后果:

请输出一个整数:1
请输出另一个整数:4
后果为: 0.25
任何状况都会执行
程序完结

traceback模块

应用traceback模块打印异样信息

import tracebacktry:    print('1.------------------')    num = 10/0except:    traceback.print_exc()

输入后果:

Traceback (most recent call last):
File "D:\study\python-study\chap8\traceback.py", line 5, in <module>
num = 10/0
ZeroDivisionError: division by zero

Python中常见的异样类型

异样类型简述
ZeroDivisionError除(或取模)0(所有数据类型)
IndexError序列中找不到该索引
KeyError映射中找不到该键
NameError未声明/初始化对象(没有属性)
SyntaxError语法错误
ValueError传入有效的参数