对于包装函数,为什么以下方法不起作用:
# 3. DISALLOW EXECUTION IN MAIN
def disallow_main(func):
if __name__ == '__main__':
raise RuntimeError("Cannot run from main.")
return func
@disallow_main
def echo(prompt='-> '):
_inp = input(prompt)
print ("ECHO: %s" % _inp)
也就是说,为什么在定义函数之前它会引发?如何正确地构造包装?你知道吗
正如在注释中所指出的,这解释了为什么检查在发生的时候发生,但是仍然不能做您想要的事情。此检查仅检查包含
disallow_main
的模块是否为__main__
;而不检查调用代码是否为__main__
。你需要一个更复杂的检查来完成你想要的。你知道吗您需要将传递的函数包装到执行检查的包装函数中。您在运行decorator时进行检查,这与调用函数时是分开的。你知道吗
注意
wrapper
是如何返回的,一旦完成验证,它就调用func
。你知道吗相关问题 更多 >
编程相关推荐