11 异常
11.1 异常种类
异常种类 没必要记,不懂的话直接去百度即可
- AttributeError 试图访问一个对象没有的属性
- IOError 输入、输出异常
- ImportError 无法引入模块或者包
- IndentationError 语法错误,代码缩进问题
- IndexError 数组越界
- KeyError 字典中不存在的键
- KeyboardInterrupt 按Ctrl+C异常中止
- NameError 使用一个还没赋予对象的变量
- SyntaxError 语法错误
- TypeError 传入对象类型和期望的不符合
- ValueError 传入一个调用者不期望的值
10.2 异常捕获
基本语法
1try: 2 检测的代码块 3except: 4 如果检测到异常,就执行这个位置的代码 5
例子:
1try: 2 a 3except: 4 print("这个是错误的!!!")
例子2:
1try: 2 a 3except NameError: #捕获特定的异常,只捕获NameError,其他的不捕获 4 print("捕获到NameError")
例子3:
1try: 2 a 3except NameError as e: #e是一个别名 4 print(e) #打印异常信息 5
例子4:捕获所有异常
1try: 2 a 3except Exception as e: 4 print(e) 5
10.3 异常捕获-else用法
else在没有异常的时候才会执行
1try: 2 a = 1/0 3except Exception as e: 4 print(e) 5else: 6 print("没有异常,才会打印") 7
10.3 异常捕获-finally 用法
finally无论是否有异常都会执行代码
1try: 2 a = 1/0 3except Exception as e: 4 print(e) 5else: 6 print("没有异常,才会打印") 7finally: 8 print("无关有没有异常,这个都会执行") 9
10.4 抛出异常
raise 编写的时候,根据情况抛出异常
步骤:
- 创建一个Exception(‘异常提示信息‘)对象
- raise抛出这个对象(异常对象)
1# 主动抛出一个异常 2raise Exception('炒年糕没有放油') 3
1 2def funa(): 3 raise Exception('这是异常信息') 4 print("这条语句无法输出") 5funa() 6
10.5 自定义异常类
<font color="red">注!请学习面向对象后再看</font>
1try: 2 a = 1/0 3except Exception as e: 4 print("捕获到异常") 5
1# 自定义异常类,需要继承Exception类 2class HelloError(Exception): 3 def __init__(self): 4 print("这是自定义异常类") 5 6try: 7 n = input("请输入数字:") 8 if n.isalpha(): 9 raise HelloError() #抛出异常 10except HelloError as e: 11 print(e) 12 13
1 2class InputError(Exception): 3 # 自定义异常类型的初始化 4 def __init__(self,val): 5 self.val = val 6 # 返回异常类对象的描述信息 7 def __str__(self): 8 return f'{self.val} is invalid input' 9 10try: 11 raise InputError("输入的异常参数") 12except InputError as e: 13 print(e) 14
