我正在尝试根据用户输入 (y/n) 再次运行脚本。在我的主文件中,我使用装饰器从另一个文件调用了几个函数,我在此处的旧帖子中看到了它的用法,但找不到为什么我会收到错误消息:“ 游戏() TypeError: 'NoneType' 对象不可调用“
def restartable(func):
def wrapper(*args, **kwargs):
answer = 'y'
while answer == 'y':
func(*args, **kwargs)
while True:
answer = input("Play Again? y/n")
if answer in ('y', 'n'):
break
else:
print("invalid answer")
return wrapper()
@restartable
def game():
items = ["X", "Y", "Z"]
balance = support.get_deposit()
deposit, balance = support.accept_bet(balance)
spin_machine = support.spin_machine(items)
support.matrix_out(spin_machine)
coef = support.check_col(spin_machine)
support.calculate_money(balance, deposit, coef)
game()
我知道这可以在 While 循环和许多不同的方法中完成,我只是想用装饰器完成它:/
这是因为你的
return wrapper
行没有缩进,你应该返回函数而不调用它。
def restartable(func):
def wrapper(*args, **kwargs):
answer = 'y'
while answer == 'y':
func(*args, **kwargs)
while True:
answer = input("Play Again? y/n")
if answer in ('y', 'n'):
break
else:
print("invalid answer")
return wrapper
应该工作。