当确定输入为整数时,出现UnboundLocalError。

问题描述 投票:0回答:1
def main():
    prompt = input('How many players? ')

    if prompt.isdigit():
        num_players = int(prompt)

    else:
        print('Invalid input!')
        main()

    print(num_players)

main()

如果我从第一次输入一个有效的整数,一切都能正常工作,但如果我先输入一个字符串,'else'就会执行,然后我又得到提示,但是,当我实际输入一个整数时,我得到UnboundLocalError。感谢任何帮助

python python-3.x user-input
1个回答
1
投票

问题在于这个函数是递归的。当你第二次正确地输入一个整数时,函数的最内层实例 main 的外部实例,返回到 main 刚过 else 块。接下来它要做的事情是 print(num_players) 在内部实例中工作正常,但在外部实例中却没有绑定。

试着将打印移动到内层的 if

注意,这并不是真正的递归问题,如果你去掉对 main . 递归只是意味着你不会看到错误,直到你最终输入一个整数。


0
投票

你根本不应该用递归来做这个。

def main():
    while True:
        prompt = input('How many players? ')

        if prompt.isdigit():
            break

        print('Invalid input!')

    print(num_players)

没有理由使用 isdigit int;你从来没有使用过 int 值,因为它立即变成了一个 str 再由 print.

但是,您可以使用 int 而是isdigit (特别是如果计划使用 int 值,而不是 只是 打印它。

def main():
    while True:
        prompt = input('How many players? ')
        try:
            num_players = int(prompt)
            break
        except ValueError:
            pass
    print(num_players)
© www.soinside.com 2019 - 2024. All rights reserved.