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

can't convert a sys.argv strings to int

我运行我的code.py与[path/to/working_directory][文件名][粒子数]例如:

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

它们都是以字符串形式出现的,这是可以理解的。我无法将 [粒子数] 转换为整数。代码类似于:

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' object is not callable"

浮点数有效,但我需要一个整数。我试过:

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

甚至:

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

有什么想法吗?谢谢!

查看您的导入是否存在标识符冲突。

您要导入名为 int 的模块吗?

检查是否有任何 int 是 imported.Check 这也(builtin int 是否覆盖)

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

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

你确定错误发生在这一行吗?你能提供错误的整个堆栈跟踪吗?我问是因为您导入库的方式不应该有任何命名空间混淆(与使用 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。你能检查这个最小的例子是否适合你(缩小范围)吗?