Python中的错误处理

Python中的错误处理

在本文中,我们将解释Python中的错误处理。

YouTube Video

Python中的错误处理

Python中的错误处理主要通过tryexceptelsefinally这些关键字完成。使用这些构造可以使您在程序中出现错误时做出适当的响应。下面我们将解释如何使用每一个。

try

try块中,您编写想要执行的代码。如果在该块中发生错误,程序执行将立即转到except块。

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • 这段代码是一个检测 try 块中错误并通过捕获 ValueErrorZeroDivisionError 适当处理的示例。

except

except块中,您编写在特定异常(错误)发生时需要执行的代码。您还可以根据发生的异常类型捕获特定异常。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • 这段代码示例展示了在 try 块出错时,在 except 块中对每种异常类型执行不同的处理。

一起处理多个异常

当多个异常类可以共享相同的处理逻辑时,指定一个元组。

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • 这段代码示例同时捕获 IndexErrorZeroDivisionError 并用相同方式处理这些异常。

无条件捕获异常

如果您希望在一个块中处理所有类型的异常,可省略except的参数。

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • 然而,针对特定异常进行处理而不是无条件捕获所有异常更有助于发现错误和调试。尽可能明确地只处理预期的异常,如 ValueErrorTypeError,以提高代码的健壮性。

else

只有在try块中未发生错误时,else块才会执行。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • 这段代码示例展示了只有在 try 块中没有错误发生时,else 块才会执行。

finally

finally块用于编写无论try块中是否发生错误都会执行的代码。它对于释放资源或执行清理任务非常有用。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • 这段代码示例演示了无论是否发生异常,finally 块都会执行。

raise 关键字

当现有代码中的某些条件未满足时,也可以使用 raise 关键字引发异常。

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • 这段代码示例在条件不满足时,使用 raise 关键词显式抛出异常。

结论

通过这种方式处理错误,您可以防止程序崩溃,向用户显示适当的信息,并继续后续的程序处理。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video