def encrypt_decorator(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
if isinstance(result, str):
encrypted_result = ''.join(chr(ord(char) + 1) for char in result)
return encrypted_result
else:
raise ValueError("被装饰函数返回值必须是字符串")
return wrapper
@encrypt_decorator
def example_function():
return "hello"
print(example_function())
return关键字在装饰器中的处理
- 捕获返回值:在内部包装函数
wrapper
中,通过result = func(*args, **kwargs)
调用被装饰函数并捕获其返回值。
- 处理并返回:对捕获到的返回值
result
进行加密处理,加密后通过return encrypted_result
返回加密后的结果。
返回值类型相关问题及解决方法
- 问题:如果被装饰函数返回的不是字符串类型,直接进行加密处理会导致错误。
- 解决方法:在装饰器内部使用
isinstance
判断返回值类型,如果不是字符串类型,抛出ValueError
提示返回值必须是字符串。这样可以确保只有在返回值类型正确时才进行加密操作。