S01E13 Python异常
Python 异常是什么
Python 使用称为异常(exception)的特殊对象来管理程序执行期间发生的错误。每当发生让 Python 不知所措的错误时,它(exception)都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行。但是如果你未对异常进行处理,那么程序将因为错误而停止。
异常是使用 try-except
代码块处理的。try-except
代码块让 Python 执行指定的操作,同时告诉 Python 在发生异常时应该怎么办。在使用 try-except
后,即便程序出现异常,程序也将继续运行;会显示出 except
中的内容。
一个异常举例
不使用 try-except
,程序会报错并且退出;
print(5/0)
print("test")
>>> Traceback (most recent call last):
File "E:\Code\csdn\test\learn_try.py", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero
使用 try-except
;
try:
print(5/0)
except:
print("There is an error in code.")
print("test")
>>> There is an error in code.
test
程序发现了 try
代码块中的错误,进而执行 except
中的内容,然后继续执行下去,打印了测试代码。
当然,如果程序不发生错误,则不会执行 except 中的内容。
try - except - else
try:
num1 = int(input("请输入一个整数: "))
num2 = int(input("请输入另一个整数: "))
result = num1 / num2
except ZeroDivisionError:
print("除数不能为零!")
except ValueError:
print("请输入有效的整数!")
else:
# 如果没有发生异常,执行这里的代码
print(f"结果是: {result}")
在上述代码中,首先尝试将用户输入的两个值转化为整数,如果用户输入的不是数值,将会诱发 ValueError
错误;如果除数为 0 ,则会出发 ZeroDivisionError
异常。如果没有发生异常,即用户输入的是有效的整数,则会运行 else
中的内容。
更多错误
比如 FileNotFoundError
异常;
其含义为没有找到文件异常。可能原因是文件名错误、文件地址错误、或者文件根本不存在;对于这种情况,我们可以使用 try-except 来处理;
try:
contents = path.read_text(encoding='utf-8')
except FileNotFoundError:
print(f"Sorry, the file {path} does not found.")
如果我们不希望将我的错误信息打印出,即保持“静默”;即使发生错误,也不将错误报告,有代码 pass
;
try:
-- snip --
except:
pass
总结
正所谓靠别人不如靠自己。
编写得很好且经过恰当测试的代码不容易出现内部错误,如语法错误和逻辑错误。但只要程序依赖于外部因素,如用户输入、是否存在指定的文件、是否有网络连接,就有可能出现异常。
凭借经验可判断该在程序的什么地方包含异常处理块,以及出现错误时,该向用户提供多少相关的信息。
2023.9.28
北京