【问题标题】:Store invalid input in a Python list在 Python 列表中存储无效输入
【发布时间】:2021-03-09 15:06:29
【问题描述】:

我知道我可以使用 the try: except ValueError: 处理无效输入,但是如何将该输入存储在列表或变量或其他内容中?

我希望当用户输入文本时,代码的某些部分会告诉“它绝对不是 [文本]”(如下面的代码所示)。但它并没有像现在这样工作。

while True:
        try:
            while guessedNumber != realNumber:
                tries = tries + 1
                checkTries()
                guessedNumbers.append(guessedNumber)
                os.system("clear")
                print(pyfiglet.figlet_format("Try again!", font = "big"))
                print("The number is:")
                for x in guessedNumbers:
                    if x < realNumber:
                        print("Higher than " + str(x))
                    elif x > realNumber:
                        print("Lower than " + str(x))
                    elif type(guessedNumber) is not int:
                        print("Definitely not " + str(x)) # to solve this, maybe use another Try: except:.
                guessedNumber = int(input("The number is... "))
            if tries == 1:
                os.system("clear")
                print(pyfiglet.figlet_format("You won!", font = "big"))
                print("You got it in the first try! What a lucky person!")
            else:
                os.system("clear")
                print(pyfiglet.figlet_format("You won!", font = "big"))
                print("Way to go! You got it in " + str(tries) + " tries!")
                break
        except ValueError:
            guessedNumbers.append(guessedNumber)
    playAgain()

【问题讨论】:

  • 无效输入是什么意思?
  • @MarioKhoury 那(就像我的脚本列表中发生的那样)输入应该是一个整数,但如果用户输入一个字符串,那就是无效输入。控制台返回该错误。

标签: python list input user-input invalid-characters


【解决方案1】:

无论用户输入是命令行参数、传递的函数/方法值还是input() 函数返回的输入,您都可以创建一个列表并将无效输入添加到except 子句中。

命令行参数

try:
    ...
except ValueError:
    invalid_input.append(sys.argv)

函数调用

def my_func(argument):
    try:
        ...
    except ValueError:
        invalid_input.append(argument)

输入()函数

user_input = input()
try:
    ...
except ValueError:
    invalid_input.append(user_input)

请注意,您在其中定义 invalid_input 的范围取决于您的选择。

编辑 1

由于所讨论的变量只有在它是整数时才“有效”,所以检查该属性是try 子句中唯一需要的语句。

guesses = []
while True:
    guess = input("Guess a number")
    try:
        guess = int(guess)
    except ValueError:
        print(f"Definitely not {guess}")
        guesses.append(guess)
        continue

【讨论】:

  • 那行不通。我编辑了问题并在脚本中添加了部分代码。也许这有帮助。
  • @Manu1Volta 首先,我建议减少try 子句中的代码量。基本上整个代码 sn-p 在 try 子句中,很难准确指出 ValueError 的位置。其次,“那行不通”是什么意思?除非您给出预期的输出,否则我无法编写“有效”的代码。
  • 是的,你完全正确...我才刚刚开始,所以谢谢!预期的输出将是无效输入存储在列表guessedNumbers中,因此当我打印包含所有输入数字的输出以及每个数字的详细信息时,对于无效输入,打印“绝对不是[输入文本]”。跟随代码可能更容易理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2015-06-10
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多