防御性编程:Python 语言中的参数校验与异常处理
在软件开发过程中,防御性编程是一种重要的编程实践,旨在提高代码的健壮性和可靠性。在 Python 语言中,参数校验和异常处理是防御性编程的两个关键方面。本文将深入探讨 Python 中的参数校验和异常处理技术,并提供一些实用的代码示例。
参数校验
参数校验是确保函数或方法接收到的参数符合预期的一种技术。这有助于防止无效输入导致的程序错误,提高代码的健壮性。
1. 使用类型校验
在 Python 中,可以使用内置的类型检查功能来确保参数类型正确。
python
def add_numbers(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Both arguments must be int or float")
return a + b
正确使用
print(add_numbers(5, 3)) 输出:8
错误使用
print(add_numbers("5", 3)) 抛出 TypeError
2. 使用范围校验
除了类型校验,还可以对参数的值进行范围校验。
python
def validate_age(age):
if not isinstance(age, int) or age 120:
raise ValueError("Age must be a non-negative integer and less than or equal to 120")
return True
正确使用
print(validate_age(25)) 输出:True
错误使用
print(validate_age(-5)) 抛出 ValueError
3. 使用正则表达式校验
对于字符串类型的参数,可以使用正则表达式进行校验。
python
import re
def validate_email(email):
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$'
if not re.match(pattern, email):
raise ValueError("Invalid email format")
return True
正确使用
print(validate_email("example@example.com")) 输出:True
错误使用
print(validate_email("example.com")) 抛出 ValueError
异常处理
异常处理是 Python 中处理错误的一种机制。通过捕获和处理异常,可以避免程序因错误而意外终止。
1. 使用 try-except 块
try-except 块是 Python 中最常用的异常处理机制。
python
def divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Cannot divide by zero")
result = None
return result
正确使用
print(divide(10, 2)) 输出:5.0
错误使用
print(divide(10, 0)) 输出:Cannot divide by zero
2. 使用 else 和 finally 语句
else 语句在 try 块没有抛出异常时执行,而 finally 语句无论是否发生异常都会执行。
python
def process_data(data):
try:
处理数据
pass
except Exception as e:
print("An error occurred:", e)
else:
print("Data processed successfully")
finally:
print("Cleaning up resources")
调用函数
process_data(data)
3. 自定义异常
Python 允许自定义异常类,以便更精确地处理特定类型的错误。
python
class CustomError(Exception):
pass
def custom_error_example():
try:
可能引发 CustomError 的代码
pass
except CustomError as e:
print("Custom error occurred:", e)
调用函数
custom_error_example()
总结
参数校验和异常处理是 Python 语言中防御性编程的两个重要方面。通过合理地使用参数校验和异常处理技术,可以提高代码的健壮性和可靠性。本文介绍了 Python 中的参数校验和异常处理方法,并提供了一些实用的代码示例。在实际开发中,应根据具体需求选择合适的校验和异常处理策略,以确保代码的质量和稳定性。
Comments NOTHING