常规方式
def check_prefix_regular(s):
if not s.startswith('prefix_'):
raise ValueError("字符串必须以 'prefix_' 开头")
return s
防御性编程思路
def check_prefix_defensive(s):
if not isinstance(s, str):
raise TypeError("输入必须是字符串类型")
if not s.startswith('prefix_'):
raise ValueError("字符串必须以 'prefix_' 开头")
return s
防御性编程在这个场景中的优势
- 健壮性增强:防御性编程不仅检查字符串是否以指定前缀开头,还检查了输入是否为字符串类型。这可以防止因传入错误类型数据(如整数、列表等)而导致的程序崩溃,使程序更加健壮。
- 提前发现错误:通过对输入类型进行检查,能在函数执行早期发现潜在问题,避免后续可能出现的难以调试的错误。如果在函数后续处理中假设输入为字符串类型,但实际传入的是其他类型,可能会引发一系列连锁错误,而防御性编程能在入口处就拦截这类错误。