2015-07-16 5 views
0

Я бегу мой code.py с [путь/к/working_directory] [имя файла] [число частиц], например:не может преобразовать sys.argv строки в целое

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' 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) 

какие-нибудь идеи? Благодаря!

ответ

0

Посмотрите на свой импорт для столкновения идентификатора.

Вы импортируете модуль под названием int?

+0

спасибо, да, один из моих других файлов функций вызывал scipy.integrate as int. – es1208

0

Проверьте любой int является imported.Check это также (независимо от того builtin int является переопределение)

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

ИЛИ

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

Спасибо, это помогло мне выяснить, что я переопределял встроенный – es1208

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. Можете ли вы проверить, работает ли этот минимальный пример для вас (чтобы сузить его)?