【问题标题】:Error Handling for input: list of int elements输入的错误处理:int 元素列表
【发布时间】:2020-09-02 02:26:15
【问题描述】:

我试图错误处理 numbers_list 变量的输入行。但我不确定如何做到这一点。我希望输入是 int, space, int ..

例如:

输入您要操作的数字,以空格分隔:4 7

或者另一个例子是:

输入您要操作的数字,以空格分隔:5 6 7 8

这是我的代码:

def check_numbers_valid(prompt):
    while True:
        try:

            i = input(prompt))
            if i != int,'', int:
                print("This is not the correct format. Please reenter.")
            else:
                break
        except:
            print("Enter an integer.")
    return i


#game function
def game(sys):
    #input
    #turns input into list from different elements they enter
    numbers_list = list(map(int, input("Enter the numbers you would like to operate on separated by space: ").split()))

我只是不确定在 'if i != int int:' 空间中放置什么。我知道这行不通,但我不知道如何编写代码,因为我只知道如何进行单数 int 错误处理。

谢谢你:)

【问题讨论】:

  • 在您的函数中执行split 并转换为int。如果有效,则格式正确,返回整数列表。如果没有,捕获异常,仅此而已。

标签: python list function error-handling


【解决方案1】:
def check_numbers_valid(prompt):
    while True:
        try:
            i = input(prompt)
            [int(k) for k in i.split(" ")]
            #i.split(" ") separates i into a list of strings
            #if any of them can't be turned into an integer,
            #it will cause a ValueError
        except:
            print("""This is not the correct format. Please reenter. (correct format: 
                   integers separated by spaces)""")
            continue
        else:
            break
    return i

我稍微移动了代码并添加了一些东西来检查输入的非空格部分是否可以转换为整数列表。如果不能,它将抛出错误并继续循环。如果可以,它会跳出循环。希望我能帮上忙。

【讨论】:

  • 你好!谢谢你的帮助。这行得通。但是,当我尝试将列表中的元素添加在一起时,我遇到了这个问题。 “TypeError:+ 的不支持的操作数类型:'int' 和 'str'”。这是说我有一些 int 格式的列表元素和一些字符串格式的元素。你知道这是为什么吗?
  • check_numbers_valid() 函数仍然只返回用户输入的内容,它始终是一个字符串。如果您希望它返回实际的数字列表,那么将 [int(k) for k in i.split(" ") 更改为 i = [int(k) for k in i.split(" ") 应该可以。
  • 感谢您的成功。现在唯一的问题是,如果用户只输入一个输入,它仍然说它是有效的。你会如何解决这个问题?
  • 这似乎是一个边缘案例。为了不弄得太乱,如果输入的长度太小,你可以让它抛出一个错误。类似if (len(i) <= 1): raise ValueError
【解决方案2】:

这个问题有点含糊,但我希望这会有所帮助:

当您从用户那里获得输入时,它以字符串的形式出现(在这种情况下,理想情况下,您希望数字用空格分隔,例如 '1 2 3 4')

然后你可以拆分这个字符串,并将每个元素转换为整数:

i = input(prompt) # let's assume: i = '1 2 3 4'
nums = i.split(' ') # forms a list by separating on spaces: i = ['1', '2', '3', '4']
nums_list = [int(num) for num in nums]

如果输入的数据类型不能用作 int(num),则最后一行代码将引发 ValueError。

希望这有帮助!

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2018-08-02
    • 2020-03-08
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多