异常处理
捕获并处理异常
try-except 语句
使用 try-except 来捕获并处理异常,如果 try 没有检查到异常就不会执行异常处理代码,捕获的异常并不是字符串而是异常类。
语法:
| Python |
|---|
| try:
# 需要运行的代码
except:
# 异常处理代码
|
| Python |
|---|
| # 使用
try:
1 / 0
except:
print("!!!!")
# 在except指定具体的异常,只有捕获到这个异常才会执行异常处理代码
try:
1 / 0
except ZeroDivisionError:
print("!!!!")
# 在except后面添加as将异常内容提取出来
try:
1 / 0
except ZeroDivisionError as err:
print("!!!!")
print(err)
# 在except后面使用元组添加多个异常类型
try:
1 / 0
1 + '1'
except (ZeroDivisionError, ValueError, TypeError) as err:
print("!!!!")
print(err)
# 单独处理不同异常使用多个except实现,捕获到异常后面代码就不会继续执行
try:
1 / 0
1 + '1'
except ZeroDivisionError as err:
print("ZeroDivisionError")
print(err)
except ValueError as err:
print("ValueError")
print(err)
except TypeError as err:
print("TypeError")
print(err)
|
1.1.2 try-except-else
当 try 语句没有检测出异常的情况下,执行 else 语句内容,检测出异常执行 except 内容。
| Python |
|---|
| try:
1 / 0
except:
print("!!!")
else:
print("未发生错误")
|
try-except-finally 语句
无论异常是否发生都必须执行 finally 内容,通常用于执行收尾工作的内容,在函数中,即使在 try 中有 return 语句,最后也会执行 finally 内容。
| Python |
|---|
| try:
f = open("1.txt", "w")
f.write("1111")
except:
print("!!!!")
finally:
f.close()
|
try-finally 语句
等待 try 执行完成或者报错然后执行 finally 内容。
| Python |
|---|
| try:
while True:
pass
finally:
print("ok")
# 此时需要强制结束程序才可以退出,强制结束会先打印ok
|
异常处理基本语法
| Python |
|---|
| try:
# 检测范围
except [expression [as identifier]]:
# 异常处理代码
[except [expression [as identifier]]:
# 异常处理代码]*
[else:
# 没有触发异常执行的代码]
[finally:
# 收尾工作执行的代码]
try:
# 检测范围
finally:
# 收尾工作执行的代码
|
异常处理嵌套语法
| Python |
|---|
| try:
try:
fin
except:
print("内部错误")
1 / 0
except:
print("外部错误")
finally:
print("收尾工作")
|
raise 语句
主动引发异常,注意不可以使用 raise 声明一个不存在的异常。
| Python |
|---|
| raise ValueError("值不正确")
# raise 可以不添加任何错误类型直接使用
# 不添加错误类型会引发RuntimeError异常
|
raise 语句可以更改异常类型。
| Python |
|---|
| try:
1 / 0
except:
raise ValueError("!!!!")
|
raise 异常链。
| Python |
|---|
| raise ValueError("值不正确") from ZeroDivisionError
|
assert 语句
主动引发异常,不过 assert 只可以引发 AssertionError 的异常,语句存在的意义通常用于代码调试,如果程序的判断不存在立马抛出异常。
| Python |
|---|
| f = "a"
assert if f == "a" # 如果条件成立程序正常执行
assert if f == "b" # 如果条件不成立就会引发一个AssertionError异常
|
利用异常来实现 goto
Python 没有 goto 语句,不想其他语言使用 goto 语句可以直接跳转至指定代码,可以使用异常来实现 goto。
| Python |
|---|
| try:
while True:
while True:
for i in range(10):
if i > 3:
raise
print(i)
except:
print("程序到这里了")
|
代码示例
| Python |
|---|
| # 请编写代码,实现在捕获异常之后,打印一句 “出错啦”,再重新抛出相对应的异常(注意,这里我们说的异常并不特指具体的哪一类,而是泛指所有的异常
try:
1 / 0
except:
print("出错啦~")
raise
# Exception 所有异常类都是从它继承,可以将它代替为止的异常
try:
1 / 0
except Exception as err:
print("出错啦~")
print(err)
|