文章目录
- 1.python异常
- 2.try_except异常处理结构
- 3.try... 多个except异常处理
- 4.try_except_else异常处理结构
- 5.try_except_finally异常处理结构
- 6.常见报错类型
在运行代码时,总是遇到各种异常,且出现异常时,脚本就会自动的的停止运行,那我们该如何处理异常呢?
1.python异常
可以看到调用a方法时:想要输出两个内容,但是因为第一个print(2/0)
报错,导致下面的内容也被停止执行,有没有可以指出报错地方的同时还可以执行下面的代码
2.try_except异常处理结构
try:
可能报错的语句执行体
except (报错异常名称):
报错异常的语句执行体
try块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。执行的时候,如果 try块中没有引发异常,则跳过ecept块继续执行后续代码;执行的时候,如果try块中发生了异常,则跳过 try块中的后续代码,跳到相应的except块中处理异常;异常处理完后,继续执行后续代码。|
try:
print(1)
num = 3/0
print(2)
except BaseException as e:
print(3)
print(e)
输出
1
3
division by zero
3.try… 多个except异常处理
try:
可能报错的语句执行体
except (报错异常名称):
报错异常的语句执行体
except (报错异常名称):
报错异常的语句执行体
except (报错异常名称):
报错异常的语句执行体
跟上面的没有多大的区别,就是根据报错名称,去选择性的执行报错异常体,更好的让客户了解异常出现的原因
try:
a = int(input("输入数字:"))
b = int(input("输入数字:"))
print(a/b)
except ZeroDivisionError:
print("除数不能为0")
except ValueError:
print("只能输入整数")
except BaseException as e:
print(e)
输出:
输入数字:a
只能输入整数
输入数字:3
输入数字:0
除数不能为0
4.try_except_else异常处理结构
try…except…else结构增加了“else块”。如果 try块中没有抛出异常,则执行else块。如果trv块中抛出异常,则执行except块,不执行else块。
try:
a = int(input("输入数字:"))
b = int(input("输入数字:"))
c = a/b
print(c)
except ZeroDivisionError:
print("除数不能为0")
except ValueError:
print("只能输入整数")
except BaseException as e:
print(e)
else:
print(c*100)
输出
输入数字:3
输入数字:2
1.5
150.0
5.try_except_finally异常处理结构
无论代码有没有什么遇到异常,都会执行finally语句,通常是为了释放try资源
try:
可能报错的语句执行体
except (报错异常名称):
报错异常的语句执行体
finally:
必须执行的代码
如果不存在该文件,f.close()就会报错,需要再try,接受异常
try:
f = open("D://1.txt","r",encoding="utf-8")
data = f.read()
print(data)
except FileNotFoundError:
print("file文件不存在")
finally:
try:
f.close()
except NameError:
print("f没有定义")
6.常见报错类型
错误类型 | 描述 |
---|---|
SyntaxError | 表示代码中存在语法错误。 |
IndentationError | 当代码中缩进不正确时发生。 |
NameError | 当未找到本地或全局名称时引发。 |
TypeError | 表示将操作或函数应用于不适当类型的对象。 |
ValueError | 当内置操作或函数收到具有正确类型但不合适值的参数时引发。 |
KeyError | 在字典键未找到时引发。 |
IndexError | 表示序列下标超出范围。 |
AttributeError | 在属性引用或赋值失败时引发。 |
ImportError | 当导入语句无法找到要导入的模块或名称时引发。 |
FileNotFoundError | 当请求但找不到文件或目录时引发。 |
IOError | 在输入/输出操作失败时引发(例如,打开或写入文件)。 |
ZeroDivisionError | 在除以零或取模零时引发。 |
KeyboardInterrupt | 当用户中断执行(例如,按下 Ctrl+C)时引发。 |
MemoryError | 表示操作耗尽了内存。 |
NotImplementedError | 当需要在子类中实现的抽象方法未实现时引发。 |
OverflowError | 表示算术操作的结果太大无法表示。 |
RecursionError | 表示超出了最大递归深度。 |
SystemExit | 当 Python 解释器退出时引发。 |