首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argv - String

Argv - String
EN

Stack Overflow用户
提问于 2013-06-29 18:32:32
回答 3查看 46K关注 0票数 15

我在python很新,我一直在玩argv。我在这里编写了这个简单的程序,得到了一个错误,上面写着:

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

代码语言:javascript
复制
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放入字符串中?如果是,如何将这些转换为整数?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-29 18:33:53

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

但是,您需要分配结果:

代码语言:javascript
复制
num1 = int(argv[1])
num2 = int(argv[2])

或者简单地使用:

代码语言:javascript
复制
num1, num2 = int(num1), int(num2)

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

票数 29
EN

Stack Overflow用户

发布于 2013-06-29 18:33:57

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

代码语言:javascript
复制
num1 = int(argv[1])  #assign the return int to num1
num2 = int(argv[2])

只做:

代码语言:javascript
复制
int(argv[1])
int(argv[2])

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

请修改原始列表,您可以这样做:

代码语言:javascript
复制
argv[1:] = [int(x) for x in argv[1:]]
file_name, num1, num2 = argv  #now num1 and num2 are going to be integers
票数 6
EN

Stack Overflow用户

发布于 2013-06-29 18:36:22

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

代之以:

代码语言:javascript
复制
int(argv[1])
int(argv[2])

在这方面:

代码语言:javascript
复制
num1 = int(num1)
num2 = int(num2)

而且它应该能工作。

int(.),str(.)etc函数不修改传递给它们的值。相反,它们将数据重新解释为另一种类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17383470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档