# 异常处理
# 常见异常
# 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的异常