0 Daumen
317 Aufrufe

Ich versuche, eine Python-Datei in ein Anaconda-Jupyter-Notizbuch zu importieren. Aber heute sagt er mir, dass es einen NameError gibt.

    ---------------------------------------------------------------------------
    NameError                                Traceback (most recent call last)
    <ipython-input-7-28aefea88e42> in <module>
          1 import imp
          2 from stocker import Stocker
    ----> 3 imp.reload(stocker)

    NameError: name 'stocker' is not defined



Ich habe es auch versucht :

    import importlib
    from stocker import Stocker
    importlib.reload(stocker)

Aber es funktioniert auch nicht.


Sicher habe ich stocker.py Sun-Datei, die ich vom Notebook aus anrufe

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Wie importiere ich eine Python-Datei?

Das Importieren einer Python-Datei in ein Jupyter-Notebook (oder jede andere Python-Umgebung) kann eine effiziente Methode sein, um organisierten und wiederverwendbaren Code zu haben. Der Fehler, den Sie erleben, deutet darauf hin, dass es ein Problem mit der Art und Weise gibt, wie Sie versuchen, die stocker Datei zu importieren und neu zu laden.

Es gibt zwei Hauptprobleme in Ihrem Ansatz. Lassen Sie uns diese näher betrachten und Lösungen dafür anbieten.

1. Problem beim ersten Ansatz

Der Fehler:


NameError: name 'stocker' is not defined


tritt auf, weil beim Aufrufen von imp.reload(stocker), Python erwartet, dass stocker eine Variable im aktuellen Namensraum (Namescope) ist, die das Modul repräsentiert. Aber Sie versuchen, ein Modul anhand seines Namens als String neu zu laden, ohne dass stocker zuvor als Modul objekt definiert wurde.

Lösung für das erste Problem:

Um dieses Problem zu lösen, müssen Sie zuerst das stocker Modul als ein Objekt importieren, sodass Sie es direkt an imp.reload() (bzw. importlib.reload() in neueren Python-Versionen) übergeben können.

Beispielcode:

python
import importlib
import stocker  # Importiere das gesamte stocker Modul
from stocker import Stocker  # Importiere eine spezifische Klasse oder Funktion

importlib.reload(stocker)  # Jetzt ist 'stocker' als Modul definiert


2. Problem beim zweiten Ansatz

Wenn Sie importlib.reload(stocker) verwenden, nachdem Sie versucht haben from stocker import Stocker, treten Sie in das gleiche Problem wie zuvor. Sie beziehen sich auf stocker als wäre es eine variable im Skript, aber alles, was Sie importiert haben, ist spezifisch Stocker aus stocker.

Lösung für das zweite Problem:

Sie müssen auch hier, wie in Lösung 1, zuerst das gesamte Modul importieren.

Beispielcode:

python
import importlib
import stocker  # Importiere das Modul, um es zugänglich für reload() zu machen

# Wenn nötig, können Sie immer noch spezifische Teile importieren für direkte Verwendung
from stocker import Stocker

importlib.reload(stocker)  # Jetzt sollte es funktionieren, da 'stocker' definiert ist


Zusätzlicher Hinweis:

Wenn Sie Stocker spezifisch verwenden möchten, müssen Sie nicht unbedingt das gesamte Modul neu laden, es sei denn, Sie haben Änderungen am Quellcode des stocker Moduls vorgenommen, während Ihr Jupyter-Notebook läuft. Wenn dies der Fall ist, ist der oben genannte Ansatz korrekt, um sicherzustellen, dass Änderungen berücksichtigt werden.

Zusammenfassend lässt sich sagen, dass Sie auf den korrekten Import und die Definition der Module achten müssen, die Sie neu laden wollen. Dies wird helfen, die NameError Probleme zu vermeiden, die Sie erfahren haben.
Avatar von 4,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community