Python异常处理总结攻略
什么是异常?
在程序运行中,一些不可预测或不符合条件的情况可能会损坏或导致程序失败。当这些问题出现时,Python将会抛出一个异常。简而言之,异常指任何在程序运行期间不正常的行为。如:除零错误、语法错误、脚本中不存在的变量等。
异常处理的类型
Python语言提供了两种异常处理机制:
- try/except语句: 可以在代码块中放置不正常的代码,以指定的方式处理异常。
- raise语句: 可以引发预先定义的异常,如果某些代码无法正确执行。
try/except语句
try/except
语句的语法:
try:
# 正常的操作
...
except ExceptionType:
# 代码遇到异常怎么办
...
可以有多个except
子句,以处理不同类型的异常。finally
代码块可以是任何情况下都必须运行的一些代码。如果没有异常发生,则except
代码块被跳过,执行finally
代码块。
以下是一个简单的示例,捕获了ZeroDivisionError
异常:
try:
x = 1 / 0
except ZeroDivisionError:
print("Division by zero!")
raise 语句
另一种处理异常的方式是使用raise
语句。raise
语句允许程序员强制抛出一个指定的异常。可以使用raise
语句,来在必要时终止程序的运行。
以下是一个简单的示例,抛出了ZeroDivisionError
异常:
raise ZeroDivisionError("cannot divide by zero")
异常处理的最佳实践
当遇到异常时,Python解释器通常会停止程序的执行。这并不总是希望的,因为这会导致程序崩溃。为了避免这种情况,我们可以非常小心地在程序中处理异常。以下是一些异常处理的最佳实践:
- 只捕获必要的异常类型;
- 不要在
try/except
块中放入太多的代码; - 保证你的代码在没有引入任何异常时是干净的;
- 使用
finally
子句来确保任何资源在完成后都得到释放; - 尽可能细致的描述异常;
- 如果不能处理异常,最好让异常继续传递。
示例
下面是一个示例,演示了如何使用try/except
语句来处理异常:
try:
a = int(input("Enter a number to divide: "))
b = int(input("Enter a number to divide by: "))
c = a / b
except ZeroDivisionError:
print("Division by zero! Please try again.")
except ValueError:
print("Invalid input! Please try again.")
else:
print(f"The result is {c}.")
finally:
print("Thank you for using the calculator!")
在这个示例中,我们尝试将两个整数相除,并将结果赋值给变量c
。但如果用户除以零或提供了无效的输入,我们将捕获特定的异常。如果一切顺利,则我们输出结果。但不管如何,我们都保证输出一条结束信息。
下面是另一个示例,演示了如何使用raise
语句来抛出异常:
def square_root(x):
if x < 0:
raise ValueError("Cannot compute square root of negative number.")
return x ** 0.5
try:
print(square_root(4))
print(square_root(-4))
except ValueError as ve:
print(f"Error: {ve}")
在这个示例中,我们定义一个square_root
函数,该函数接受一个参数,该参数必须为正数。如果参数小于0,则抛出一个ValueError
异常。我们使用try/except
语句调用函数两次,一次传递正数,另一次传递负数。在第二次调用时,我们抛出了异常,但使用except
捕获了异常,打印出了错误信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python异常处理总结 - Python技术站