使用装饰器根据用户回答再次运行 python 脚本

问题描述 投票:0回答:1

我正在尝试根据用户输入 (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 循环和许多不同的方法中完成,我只是想用装饰器完成它:/

python python-decorators
1个回答
1
投票

这是因为你的

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

应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.