无法将sys.argv字符串转换为int

时间:2015-07-16 07:19:59

标签: python int sys

我使用[path / to / working_directory] ​​[filename] [粒子数]运行我的code.py,例如:

python2 code.py /home/user/file thing.txt 100

他们都是可以理解的字符串。我无法将[粒子数]转换为int。代码看起来像:

import math, scipy, numpy ...ect
import ConfigParser
import sys


def main():
    working_dir = sys.argv[1]
    filename = sys.argv[2]
    if filename.endswith('.txt'):
        filename = filename[:-4]   #removes '.txt' extension

    number_parts = int((sys.argv[3]))

我在此阶段遇到以下错误:

  

" TypeError:' module'对象不可调用"

Floats工作,但我需要一个整数。我试过了:

number_parts = int(float(sys.argv[3]))

甚至:

temp = float(sys.argv[3])
ignore, number_parts = modf(temp)
number_parts = int(number_parts)

任何想法?谢谢!

3 个答案:

答案 0 :(得分:0)

查看导入的标识符冲突。

您是否导入名为int的模块?

答案 1 :(得分:0)

检查是否导入了int。同时检查(builtin int是否覆盖)

>>>type(int)
<type 'type'>
>>>callable(int)
True

OR

from __builtin__ import int
number_parts = int((sys.argv[3]))

答案 2 :(得分:0)

您确定此行发生了错误吗?你能提供整个错误的堆栈跟踪吗?我问,因为你导入你的库的方式应该没有任何名称空间混淆(而不是导入from ... import *)。

另外,我会删除int((sys.argv[3]))中的额外括号(或者您以后将其用作元组?)并将其更改为int(sys.argv[3])

对我来说,当我使用您使用的相同命令调用它时,这是有效的:

import math, scipy, numpy
import ConfigParser
import sys

def main():
    working_dir = sys.argv[1]
    filename = sys.argv[2]
    if filename.endswith('.txt'):
        filename = filename[:-4]   # removes '.txt' extension

    number_parts = int(sys.argv[3])
    print number_parts

if __name__ == "__main__":
    main()

将打印100。你能检查一下这个最小的例子是否适合你(缩小范围)?