【发布时间】:2019-05-31 01:13:35
【问题描述】:
抱歉,我只能想象 StackOverflow 上到处都是几乎在那里,但仍然不太了解装饰器的人。
我正在尝试装饰一系列与os相关的功能,以便如果出现FileNotFoundError或PermissionError等异常,用户可以自行修复问题并重试。
所以我创建了这个玩具函数和装饰器,但我不明白我在哪里没有正确遵循我一直在阅读的示例装饰器,而且我在推理时遇到了麻烦:
from functools import wraps
def continual_retry(func):
def retry_decorated(*args, **kwargs):
@wraps(func)
def func_wrapper(*args, **kwargs):
while not stop:
try:
func(*args)
stop = True
except Exception as e:
print(f'Could not perform function {func.__name__}')
print(f' with args {repr(args)}')
print(f' due to error {e.class__}')
redo = input('Retry (y/n)? ')
if redo.lower() != 'y':
print('Exiting program due to error and user input')
sys.exit(0)
return func_wrapper
return retry_decorated
@continual_retry
def divide(a, b):
return a/b
当我运行函数divide时,结果如下:
>>> divide(1, 2)
<function __main__.divide(a, b)>
我期待的结果
0.5
(那我要去测试divide(1, 0))
【问题讨论】:
标签: python decorator python-decorators