TypeError:不支持的操作数类型 - :'str'和'int'(帮助)

时间:2012-01-07 20:04:06

标签: python python-3.x

这是我的代码:

def get_user_list(message, datatype):
    while True:
        str_input = input(message)
        if str_input == '':
            print('Error: Received no input.')
        for i in range(str_input - 1):
            if datatype == 'int':
                try:
                    return int(str_input)
                except ValueError: 
                    print("Error: Element '" + str_input[i] + "' is not of type " + datatype + ".")
            elif datatype == 'float':
                try:
                    return float(str_input)
                except ValueError: 
                    print("Error: Element '" + str_input[i] + "' is not of type " + datatype + ".")

            else: 
                 return str_input 

我无法弄清楚它有什么问题... somone请帮助......谢谢

3 个答案:

答案 0 :(得分:3)

作为input()的返回值,str_input是一个字符串。 (您可能已经想到了这一点,因为您相应地命名了变量。)在表达式range(str_input - 1)中,您尝试从此字符串中减去一个整数,这是不可能的。您还需要先将输入转换为整数,例如range(int(str_input) - 1)。请注意,您的错误检查不足以解决此问题,因为并非每个非空字符串都可以转换为整数。 (此外,当您检测到空字符串时,您只需打印错误消息并继续,这将无效。)

答案 1 :(得分:1)

抱歉,这段代码有点混乱。

  1. range仅将整数作为参数,并且您传递的是字符串。如果您尝试遍历字符串的所有字符,则应传递字符串的 length ,如下所示:range(len(str_input))。如果您尝试遍历输入中的所有单词,则必须先将其拆分为一个序列,如下所示:words = str_input.split(); for i in range(len(words)):: ...。它仍然不会是非常pythonic,但你可能不关心它。
  2. 比较字符串时没有进行
  3. 类型比较。你这样做:type(myvar) == int。请注意类型名称周围没有引号。
  4. datatype永远不会被定义。请注意,从str_input获得的字符或单词将始终为str类型;如果你想要其他类型,你必须明确地转换它们,那时类型比较将是无用的(你已经知道了类型,对吧?)。
  5. 如果你试图检查一些字符串是否代表int或float,你会做这样的事情:

    try:
        myvar = int(word)
    except ValueError:
        print('this is not an integer')
    
  6. 在错误消息中,您只传递输入的一个字符。这可以;但是,如果你真的在处理单个字符,那么比较类型没有任何意义:单个字符只能是int或字母,它永远不能是float(float有小数;你怎么能用一个字符表示小数?)。如果你真的对单个字符感兴趣,你可以使用他们的方法:

    >>> "a".isdigit()
    False
    >>> "1".isdigit()
    True
    
  7. 如果这是一个学校练习,你必须更好地考虑你真正想要完成的事情。

答案 2 :(得分:0)

请按照上述帖子更正您的代码。

如果你想要变量的类型只需写

x=10
print (x.__class__)
x = "My Name"  
type(x)

这将为您提供变量的类型,您可以轻松识别方法中导致问题的原因。