5 个使用 try、except 和 finally 处理异常的 Python 示例
python 中的异常是语法正确的语句抛出的错误。
它们终止脚本的执行。异常的一些示例是 NameError、TypeError、AssertionError、ConnectionAbortedError 等。
可以处理这些中止以防止脚本不可预测地终止。
本篇涵盖以下示例:
- Python try-except 块
- Python 中的多异常处理
- Python finally 块 - 发生异常时
- Python finally 块 - 当没有异常时
- Python 嵌套 try-except 块
看看下面的代码:
t
a = 12
s = "hello"
print(a+s)
Output:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
这里的打印函数语法是正确的,但是整数和字符串的相加是错误的。因此 TypeError 是由 python 解释器引发的。
1. Python try-except 块
处理异常涉及的关键字是 try、except 和 finally。
Try 块后面必须跟一个 except 块。finally 块的添加是可选的。
try 块中的语句是逐行执行的。如果执行任何语句抛出异常。跳过此块中的其余语句并开始执行 except 块。
例子:
a = 12
s = "hello"
try:
print("inside try")
print(a + s) # will raise TypeError
print("Printed using original data types")
except TypeError: # will handle only TypeError
print("inside except")
print(str(a) + s)
print("Printed using type-casted data types")
输出:
inside try
inside except
12hello
Printed using type-casted data types
这里 TypeError 在 try 块内的第 2 行的执行中引发。因此,其余语句的执行被跳过,除了块执行开始。请注意,要处理的异常与 except 关键字一起提到。
2. Python 中的多异常处理
可以使用单个 try-except 块处理多个异常。这是通过提及异常名称来完成的,在括号内以逗号分隔,紧跟在 except 关键字之后。
try:
if (3 + 4 - 5) > 0:
a = 3
a.append("hello") # throws AttributeError
else:
print("hello" + 4) # throws TypeError
except (AttributeError, TypeError) as e:
print("Error occurred:", e)
输出:
Error occurred: 'int' object has no attribute 'append'
3. Python finally 块——当异常发生时
finally 是位于 except 块之后的块。无论是否遇到异常,都会执行该语句块。
将 finally 块添加到上一个示例中:
try:
if (3 + 4 - 5) > 0:
a = 3
a.append("hello") # throws Attribute Error
else:
print("hello" + 4) # throws TypeError
except (AttributeError, TypeError) as e:
print("Error occurred:", e)
finally:
print("try except block successfully executed")
输出:
Error occurred: 'int' object has no attribute 'append'
try except block successfully executed
这里 try 中的语句引发了异常,除了块被执行,然后是 finally 块。
4. Python finally 块——当没有异常时
再看一个例子:
try:
if (3 + 4 - 5) < 0:
a = 3
print(a + 5) # simple addition
else:
print("hello" + "4") # string concatenation
except (AttributeError, TypeError) as e:
print("Error occurred:", e)
finally:
print("try except block successfully executed")
输出:
8
try except block successfully executed
在这里我们看到即使except块从未执行过,finally块也被执行了。
如果 except 和 finally 块中的语句引发异常,则剩余的脚本执行将终止。
5. Python 嵌套 try-except 块
一个 try-except 块可以被另一个 try-except 块包围。
import json
import sys
try:
with open("hello.json") as fp:
try:
json_dict = json.load(fp)
except json.JSONDecodeError:
print("Json file does not exist")
print(json_dict)
except:
print("error occurred while parsing json:", sys.exc_info()[1])
输出:如果 hello.json 存在
{'name': 'Aanisha', 'surname': ‘Mishra'}
输出:如果 hello.json 不存在
error occurred while parsing json: [Errno 2] No such file or directory: 'hello.json'
输出:如果 hello.json 不是有效的 json 文件
Json file does not exist
error occurred while parsing json: name 'json_dict' is not defined
这种形式的解决方案也可以处理在 except 或 finally 块中引发的异常。
- 点赞
- 收藏
- 关注作者
评论(0)