趋近智
即使是精心编写的程序,运行时也可能遇到问题。有些错误,称为语法错误,在程序开始执行前就会被Python捕获。这些通常是拼写错误或代码结构不正确,例如忘记冒号或括号不匹配。Python会立即停止并告知你这些问题。
然而,还有另一类错误只在程序运行时发生。设想一下,要求程序用零除一个数,或者尝试打开一个电脑上不存在的文件。这些情况没有违反Python的语法规则,所以程序会开始运行,但它们代表了在执行过程中发生的不可能或出乎意料的操作。
这些运行时错误在Python中被称为异常。异常是在执行过程中检测到的一个事件,它会中断程序指令的正常流程。可以将其理解为Python遇到了一个无法按照标准指令处理的情况,并发出信号表明发生了异常事件。
区分语法错误和异常很重要:
语法错误: 在执行开始前被捕获。它们会完全阻止程序运行。Python会标识出语法问题的所在。
# 语法错误示例(缺少冒号)
age = 30
if age > 18 # 这里缺少冒号!
print("Adult")
运行这段代码会在任何事情发生前导致 SyntaxError。
异常: 在执行期间发生。程序开始运行,但遇到了障碍。
# 异常示例 (ZeroDivisionError)
numerator = 10
denominator = 0
result = numerator / denominator # 问题在这里执行期间发生
print(result)
print("计算完成。") # 这一行永远不会被执行到
这段代码语法正确。它开始运行,但当它尝试执行 10 / 0 除法运算时,Python检测到不可能的操作并引发一个异常。
异常可能由多种情况引起,包括:
ZeroDivisionError)。TypeError)。
# 类型错误示例
count = 5
message = "Apples: " + count # 不能直接将字符串和整数相加
IndexError)。
# 索引错误示例
my_list = [10, 20, 30]
print(my_list[3]) # 索引 3 超出范围(有效索引为 0, 1, 2)
FileNotFoundError)。ValueError)。当Python检测到运行时错误时,它会引发一个异常。这意味着它会创建一个异常对象,包含有关错误的信息(例如其类型和发生位置),并在该点停止正常的执行流程。
不同类型的错误会引发不同类型的异常(例如,ZeroDivisionError、TypeError、FileNotFoundError)。了解异常的类型有助于理解哪里出了问题。
如果引发了异常,而你的代码中没有包含特定的处理指令,程序就会立即终止。Python通常会打印一条称为回溯信息(或堆栈跟踪)的消息。回溯信息显示了导致错误的函数调用序列以及所引发的异常类型。
再次考虑除以零的例子:
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
运行这段代码可能会产生类似于这样的输出(细节可能略有不同):
Traceback (most recent call last):
File "my_script.py", line 3, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
这份回溯信息告知我们:
my_script.py 文件的第3行。result = numerator / denominator。ZeroDivisionError。虽然回溯信息对开发者调试很有用,但你不会希望最终用户看到它们,也不希望程序就此崩溃。因此,学习如何处理异常非常重要。通过预见潜在的错误并编写代码来捕获这些异常,你可以防止程序崩溃,向用户提供有用的消息,或者尝试优雅地从错误中恢复。接下来的部分将准确展示如何使用Python的 try、except、else 和 finally 语句来实现这一点。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•