处理 Python 语法错误与异常

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

欢迎来到 Python 语法错误与异常处理实验!在本实验中,你将学习如何识别和修复 Python 代码中的语法错误,以及如何处理代码执行过程中可能引发的异常。

学习目标

  • 语法错误
  • 异常处理

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/BasicConceptsGroup -.-> python/python_shell("Python Shell") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/finally_block("Finally Block") subgraph Lab Skills python/python_shell -.-> lab-80{{"处理 Python 语法错误与异常"}} python/conditional_statements -.-> lab-80{{"处理 Python 语法错误与异常"}} python/for_loops -.-> lab-80{{"处理 Python 语法错误与异常"}} python/catching_exceptions -.-> lab-80{{"处理 Python 语法错误与异常"}} python/raising_exceptions -.-> lab-80{{"处理 Python 语法错误与异常"}} python/finally_block -.-> lab-80{{"处理 Python 语法错误与异常"}} end

理解语法错误

当 Python 解释器无法理解代码的结构时,就会发生语法错误。这可能是由于多种问题引起的,例如缺少括号或缩进不正确。

打开一个新的 Python 解释器。

python3

以下是一个由于 for 循环末尾缺少冒号而导致的语法错误的示例:

for i in range(10)
  print(i)

解释器会抛出一个语法错误,并告诉我们错误发生的位置:

File "<stdin>", line 1
    for i in range(10)
                      ^
SyntaxError: invalid syntax

脱字符号 (^) 表示语法错误的位置,错误信息告诉我们语法无效。

要修复这个语法错误,我们只需在 for 循环的末尾添加冒号:

for i in range(10):
  print(i)

现在,让我们尝试一个缩进不正确的示例:

if True:
print("Hello, World!")

在这个示例中,print 语句没有正确地缩进在 if 语句下。要修复这个语法错误,我们需要正确地缩进 print 语句:

if True:
  print("Hello, World!")

处理异常

异常是程序执行过程中发生的错误。在 Python 中,我们可以使用 tryexcept 语句来处理异常。

以下是一个如何处理 ZeroDivisionError 异常的示例:

try:
  x = 10 / 0
except ZeroDivisionError:
  print("Cannot divide by zero!")

在这个示例中,try 块包含可能引发 ZeroDivisionError 异常的代码。如果异常被引发,控制权会传递给 except 块,该块通过打印错误信息来处理异常。

我们还可以在同一个 try 块中使用多个 except 语句来处理多个异常:

try:
  x = 10 / 0
  y = int('abc')
except ZeroDivisionError:
  print("Cannot divide by zero!")
except ValueError:
  print("Invalid input!")

在这个示例中,try 块包含可能引发 ZeroDivisionErrorValueError 的代码。如果引发 ZeroDivisionError,带有 ZeroDivisionErrorexcept 块会处理它。如果引发 ValueError,带有 ValueErrorexcept 块会处理它。

抛出异常

除了处理异常之外,我们还可以使用 raise 语句在代码中抛出异常。

以下是一个如何抛出 ValueError 异常的示例:

def validate_age(age):
  if age < 0:
    raise ValueError("Age cannot be negative.")

try:
  validate_age(-1)
except ValueError as e:
  print(e)

在这个示例中,validate_age 函数会在年龄为负数时抛出 ValueError 异常。try 块调用 validate_age 函数并传入一个负数年龄,这会引发 ValueError 异常。except 块捕获该异常并打印错误信息。

捕获所有异常

有时,我们可能希望捕获 try 块中可能引发的所有异常。我们可以通过使用未指定异常的 except 语句来实现这一点:

try:
  x = 10 / 0
  y = int('abc')
except:
  print("An error occurred!")

在这个示例中,try 块包含可能引发 ZeroDivisionErrorValueError 的代码。如果其中任何一个异常被引发,它都会被 except 块捕获,并打印一条错误信息。

Else 子句

我们可以在 try 语句中使用 else 子句来指定一段代码,这段代码仅在 try 块中没有引发异常时执行:

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
else:
  print("The number is", x)

在这个示例中,try 块包含的代码可能会在用户输入无效值时引发 ValueError。如果没有引发异常,else 块会被执行并打印输入的数字。

Finally 子句

我们可以在 try 语句中使用 finally 子句来指定一段代码,无论是否引发异常,这段代码都会被执行:

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
finally:
  print("Exiting program.")

在这个示例中,try 块包含的代码可能会在用户输入无效值时引发 ValueError。无论是否引发异常,finally 块都会被执行,程序随后退出。

总结

在本实验中,你学习了如何识别和修复 Python 代码中的语法错误,以及如何使用 tryexcept 语句处理异常。你还学习了如何使用 raise 语句在代码中抛出异常,以及如何在 try 语句中使用 elsefinally 子句。

希望本实验对你有所帮助,并让你在处理 Python 语法错误和异常时更加自信!