itertools pas défini lorsqu'il est utilisé dans le module
- Je enregistrer mes fonctions personnalisées dans un module distinct que je peux appeler quand j'en ai besoin. Une de mes nouvelles fonctions utilise itertools, mais je reçois une erreur de nom.
NameError: name 'itertools' is not defined
C'est vraiment bizarre. Je peux import itertools dans la console, mais quand j'appel ma fonction, j'obtiens une erreur de nom. Habituellement, je peux utiliser les fonctions d'autres bibliothèques (pandas, sklearn, etc.) à l'intérieur d'une fonction personnalisée à l'amende juste aussi longtemps que je peux importer la bibliothèque de première.
MAIS si je l'import itertools dans la console, copier-coller de ma fonction dans la console, puis appeler la fonction, il fonctionne très bien.
Ça fait de moi un fou, mais je pense que peut-être je suis juste de ne pas comprendre les règles de modules ou de quelque chose.
voici la fonction que j'utilise dans le module. c'est tout simplement copier-collé à partir de l'un des sklearn exemples:
import itertools
def plot_confusion_matrix(cm, classes,
normalize=False,
title='Confusion matrix',
cmap=plt.cm.Blues):
import itertools
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print("Normalized confusion matrix")
else:
print('Confusion matrix, without normalization')
print(cm)
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
J'ai essayé de l'importer à l'intérieur de la fonction, à l'intérieur du module, et à l'intérieur le fichier où je fais appel à tout avec pas de chance. Si je l'importer dans la console de son amende. Même après qu'il a été importé dans la console, si je l'exécute à l'intérieur du dossier, je suis en train de travailler sur de nouveau, il donne la même erreur.
- Importation
itertools
dans le même module de fonction de votre vie - Vous devez import itertools dans le fichier qui va l'utiliser. Si vous importez ce fichier, il dispose de son propre espace de noms.
- J'ai essayé de l'importer dans mon module, mais il a encore produit une erreur. J'ai aussi essayé de l'importer dans le fichier à l'aide de il - encore une erreur.
- Si vous avez essayé de l'importation de itertools à la fois des modules et encore obtenu l'erreur, fournir un minimum de travail exemple de code pour nous de regarder
- Votre exemple de code n'a pas d'import itertools. Assurez-vous que votre exemple est un un minimum de reproductibles exemple.
- Je l'ai pris. Mise à jour dans le post original
- Vous devriez essayer de l'importer avec une minuscule
i
,import
... Et c'est OK pour importer de l'extérieur de la fonction, il suffit qu'elle soit dans le même fichier. - Toujours rien. C'est trop bizarre.
- Alors, êtes-vous positif que lorsque vous appelez la fonction ci-dessus (exactement!), vous obtenez au-dessus de la NameError? Êtes-vous sûr que ça vient de cette fonction, et pas ailleurs?
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne maintenant.
LEÇON IMPORTANTE:
Si vous modifiez un module, vous devez fermer et rouvrir spyder/ipython/whatever. Réinitialisant le noyau n'est pas suffisant. Je suis bête, je sais, mais peut-être peut-être que cette réponse va sauver quelqu'un moment.
Il suffit de changer
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
À:
for i in range (cm.shape[0]):
for j in range (cm.shape[1]):
itertools
n'a pas été chargé.Vous pouvez tout d'abord utiliser de itertools importation de produits, puis changer itertools.produit tout simplement produit. Cela devrait fonctionner.