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