J'exécute mon code.py avec [chemin / vers / répertoire_travail] [nom de fichier] [nombre de particules] par exemple:

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

Ils entrent tous sous forme de cordes naturellement. Je ne peux pas obtenir le [nombre de particules] à convertir en int. Le code ressemble à quelque chose comme:

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

J'obtiens l'erreur suivante à ce stade:

"TypeError: l'objet 'module' n'est pas appelable"

Les flotteurs fonctionnent mais j'ai besoin d'un entier. J'ai essayé:

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

Même:

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

Des idées? Merci!

0
es1208 16 juil. 2015 à 10:19

3 réponses

Meilleure réponse

Regardez vos importations pour un conflit d'identifiant.

Importez-vous un module appelé int?

0
Nitesh Patel 16 juil. 2015 à 07:24

Êtes-vous sûr que l'erreur se produit dans cette ligne? Pourriez-vous fournir toute la trace de la pile de l'erreur? Je demande parce que vous importez vos bibliothèques de manière à ce qu'il ne devrait pas y avoir de confusion d'espace de noms (par opposition à l'importation avec from ... import *).

De plus, je supprimerais les crochets supplémentaires dans int((sys.argv[3])) (ou l'utilisez-vous comme tuple plus tard?) Et le changerais en int(sys.argv[3]).

Pour moi, cela fonctionne lorsque je l'appelle avec la même commande que vous avez utilisée:

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

Qui imprimera 100. Pouvez-vous vérifier si cet exemple minimal fonctionne pour vous (pour le réduire)?

0
adrianus 16 juil. 2015 à 09:03

Vérifiez si int est importé. Vérifiez également (si builtin int est prioritaire)

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

OU

from __builtin__ import int
number_parts = int((sys.argv[3]))
0
itzMEonTV 16 juil. 2015 à 07:50