【问题标题】:TypeError: unsupported operand type(s) for -: 'str' and 'int' (help)TypeError: 不支持的操作数类型 -: 'str' 和 'int' (帮助)
【发布时间】:2012-01-07 20:04:06
【问题描述】:

这是我的代码:

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 

我无法弄清楚它有什么问题......请大家帮忙......谢谢

【问题讨论】:

  • 你可能被小语言欺骗,认为自动类型转换很好。例如,Perl 和 Javascript 允许 "5" - 1。 Python 没有,因为它实际上是一个非常糟糕的主意。另见stackoverflow.com/a/1995298/126214
  • 另外,我不明白 for 循环的用途。

标签: python python-3.x


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    抱歉,这段代码有点乱。

    1. range 只接受整数作为参数,而您正在传递一个字符串。如果您尝试遍历字符串的所有字符,则应传递字符串的 length,如下所示:range(len(str_input))。如果您尝试遍历输入中的所有单词,则必须首先将其拆分为一个序列,如下所示:words = str_input.split(); for i in range(len(words)):: ...。它仍然不会是非常 Pythonic,但您可能并不关心这一点。
    2. 类型比较未完成比较字符串。你这样做:type(myvar) == int。请注意类型名称周围没有引号。
    3. datatype 从未定义。请注意,您从 str_input 获得的字符或单词始终是 str 类型;如果您想要其他类型,则必须显式转换它们,此时类型比较将毫无用处(您已经知道类型,对吗?)。
    4. 如果你试图检查某个字符串是代表 int 还是 float,你会做这样的事情:

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

      >>> "a".isdigit()
      False
      >>> "1".isdigit()
      True
      

    如果这是一个学校练习,你必须更好地思考你真正想要完成的事情。

    【讨论】:

      【解决方案3】:

      请根据上述帖子更正您的代码。

      如果你想知道变量的类型是什么就写

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-15
        • 2012-11-29
        • 2012-12-31
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多