6
votes

Comment puis-je résoudre une erreur «NameError: name 'null' is not defined» en essayant d'importer un module dans Python 2.7

J'ai installé python aujourd'hui et utilisé pip install avec succès pour obtenir certains modules. Mais je ne peux pas importer de modules .py.

J'ai créé mod.py (il a une simple commande d'impression) dans le même répertoire que le code que j'essaie d'exécuter. J'ai également désinstallé et réinstallé anaconda. Mais l'erreur persiste. Quelqu'un avec des idées sur la façon de résoudre ce problème? Merci!

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fib(n):    # write Fibonacci series up to n\n",
    "    a, b = 0, 1\n",
    "    while b < n:\n",
    "        print b,\n",
    "        a, b = b, a+b\n",
    "\n",
    "def fib2(n):   # return Fibonacci series up to n\n",
    "    result = []\n",
    "    a, b = 0, 1\n",
    "    while b < n:\n",
    "        result.append(b)\n",
    "        a, b = b, a+b\n",
    "    return result"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

Voici un exemple de ce à quoi ressemble le code .py dans l'éditeur (même problème):

import mod

NameErrorTraceback (most recent call last)
<ipython-input-1-18de99490651> in <module>()
----> 1 import mod

C:\Users\Mayank\mod.py in <module>()
      3   {
      4    "cell_type": "code",
----> 5    "execution_count": null,
      6    "metadata": {},
      7    "outputs": [],

NameError: name 'null' is not defined


1 commentaires

Cela se produit si vous créez un bloc-notes et le renommez ensuite en fichier PY. Si vous ouvrez ce fichier, le code Python source sera entouré d'accolades, de guillemets doubles, les premières lignes contenant la référence erronée null . Vous pouvez en fait l'importer tel quel, mais vous devez arrêter et redémarrer le noyau du notebook en exécutant les instructions import EN PREMIER. Il est préférable de nettoyer ce code en Python pur, et mieux encore de simplement créer un fichier PY vierge et de déposer votre code de cellule directement au lieu de renommer les fichiers IPYNB.


4 Réponses :


9
votes

null n'est pas un mot réservé comme c'est le cas en JavaScript. Aucun n'est utilisé.


3 commentaires

Nathan - merci. Mais je ne suis pas (débutant ici). Pourriez-vous s'il vous plaît développer votre idée?


Ouais. Quelque part dans votre code, vous faites référence à null que vous n'avez pas défini et n'est pas défini par Python, donc vous obtenez une erreur de nom, c'est-à-dire que cette variable n'existe pas d'erreur


Pour référence, mod.py est très basique: import time def foo (): print time.time ()



2
votes

null n'est pas prédéfini en Python. Vous l'avez peut-être obtenu en copiant et en collant un objet JSON. Utilisez Aucun à la place de null pour désigner des objets nuls.


1 commentaires

Salut - merci pour la réponse (c'est une très bonne communauté) mais je n'ai aucune idée d'où vient le null. Le code de mod.py est essentiellement une simple commande d'impression. Qu'est-ce qu'un objet JSON? Merci encore.



1
votes

Il s'agit du code d'un notebook Jupyter, qui est stocké au format JSON et ne peut pas être exécuté directement par Python. Pour résoudre ce problème, supprimez tout ce qui ne correspond pas à l'attribut 'source' .


4 commentaires

Salut, merci pour la réponse. En tant que débutant, je ne suis pas sûr de suivre. Je ne sais pas ce que l’attribut source n’est pas ou comment je le supprimerais. Est-il possible pour vous de développer votre suggestion, s'il vous plaît? Merci encore.


Ouvrez mod.py , ctrl-F "source" et copiez tout après le : " au " suivant.


J'essaye ceci sur mon ordinateur personnel et c'est le même problème. J'ai un autre fichier .py aléatoire fibo.py et j'ai posté le code ci-dessus. J'étais confus sur ce que je suis censé déplacer après «source» et vers où. Toutes mes excuses pour les questions continues!


J'ai essayé d'importer sur spyder et cela semble fonctionner. Cela semble donc lié à Jupyter d'une manière ou d'une autre? Qu'est-ce que je fais de mal, je me demande?



4
votes

J'ai découvert le problème. Je faisais "Enregistrer sous" mod.py pour le code que j'écrivais. Au lieu de cela, j'avais besoin de «Enregistrer sous» mod », puis de« Télécharger sous »de type de fichier .py. Ce n'était qu'un problème en raison de la façon dont le fichier de module est enregistré / créé dans Jupyter. Les réponses à ma question d'hier m'ont aidé à comprendre cela. Merci à tous!


0 commentaires