我们有一些代码看起来如下:
from third_party_library import foo
for n in range(3):
try:
foo(args)
break
except:
print "Retry %i / 3" % n我想使用一个装饰器,让我们的代码更仔细,如下所示:
from third_party_library import foo
@retry(3)
foo(args)这会产生语法错误。我是遗漏了什么,还是python只是不允许语句中的装饰者呢?
发布于 2015-01-30 22:09:08
装饰器只能应用于函数和类定义,例如:
@decorator
def func():
...
@decorator
class MyClass(object):
...你不能在语言的任何地方使用它们。
要做您想做的事情,您可以创建一个普通的retry函数,并将foo和args作为参数传递。实现如下所示:
def retry(times, func, *args, **kwargs):
for n in xrange(times):
try:
func(*args, **kwargs)
break
except Exception: # Try to catch something more specific
print "Retry %i / %i" % (n, times)发布于 2015-01-30 22:08:51
Python不允许对语句进行修饰;它们只允许在类和函数定义中使用。您可以在语法规范顶部附近看到这个。
https://stackoverflow.com/questions/28245450
复制相似问题