【问题标题】:Argv - String into IntegerArgv - 字符串转换为整数
【发布时间】:2013-06-30 02:49:56
【问题描述】:

我是 python 的新手,我一直在玩 argv。我在这里写了这个简单的程序,得到一个错误提示:

TypeError: %d 格式:需要一个数字,而不是 str

from sys import argv

file_name, num1, num2 = argv
int(argv[1])
int(argv[2])
def addfunc(num1, num2):
    print "This function adds %d and %d" % (num1, num2)
    return num1 + num2

addsum = addfunc(num1, num2)
print "The final sum of addfunc is: " + str(addsum)

当我运行 filename.py 2 2 时,argv 是否将 2 2 放入字符串中?如果是这样,我如何将这些转换为整数?

感谢您的帮助。

【问题讨论】:

    标签: python argv


    【解决方案1】:

    sys.argv 确实是一个字符串列表。使用int() 函数将字符串转换为数字,前提是字符串可以转换。

    您需要分配结果,但是:

    num1 = int(argv[1])
    num2 = int(argv[2])
    

    或简单地使用:

    num1, num2 = int(num1), int(num2)
    

    您确实调用了int(),但忽略了返回值。

    【讨论】:

      【解决方案2】:

      将转换后的整数分配给这些变量:

      num1 = int(argv[1])  #assign the return int to num1
      num2 = int(argv[2])
      

      只做:

      int(argv[1])
      int(argv[2])
      

      不会影响原始项目,因为int 返回一个新的int 对象,sys.argv 中的项目不受此影响。

      哟修改原来的列表你可以这样做:

      argv[1:] = [int(x) for x in argv[1:]]
      file_name, num1, num2 = argv  #now num1 and num2 are going to be integers
      

      【讨论】:

        【解决方案3】:

        运行 int(argv[1]) 实际上不会更改 argv[1](或分配给它的 num1)的值。

        替换这个:

        int(argv[1])
        int(argv[2])
        

        有了这个:

        num1 = int(num1)
        num2 = int(num2)
        

        它应该可以工作。

        int(..)、str(...) 等函数不会修改传递给它们的值。相反,它们返回将数据重新解释为不同的类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-16
          • 2012-02-21
          • 2010-12-31
          相关资源
          最近更新 更多