Modul einfügen und Funktionen abrufen nicht durchführbar

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Hallo zusammen,
ich habe ein Modul mithilfe von Funktionen erstellt, das Berechnungen zu verschiedensten Sachen durchführen kann.
Jetzt möchte ich dieses Modul in eines meiner nächsten Programme importieren.

Dieses habe ich wie folgt gemacht:

Code: Alles auswählen

 
import sys
sys.path.append('/Users/Docments/Python/Formeln.py')
import Formeln
Wenn ich nun eine Funktion daraus abrufen will und ich Beispielsweise "Kegel( " eingebe, werden keine Parameter der Funktion angezeigt, was mit soviel sagt wie das er die Funktion nicht kennt. Dieses wird auch in der Fehlermeldung ausgegeben das die Funktion nicht definiert ist.

Was mache ich denn beim implementieren des Moduls falsch? Weiß das einer?
Danke.
BlackJack

@duodiscus: Schau Dir doch mal den Inhalt und die Dokumentation von `sys.path` genauer an. Da kommen keine Pfade mit Dateinamen rein.

Mit `sys.path` würde ich aber sowieso nicht so herum spielen. Höchstens um dort einen Pfad relativ zum Modul hinzuzufügen, aber nicht um absolute Pfade hinzuzufügen.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Auch wenn ich Pfade ohne Dateinamen angebe ändert das nichts an meinem Fehler. Habe in der Doku dazu gelesen, aber daraus auch keinen Lösungsweg gefunden. Uns würde vorgegeben damit zu arbeiten.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

duodiscus hat geschrieben:Auch wenn ich Pfade ohne Dateinamen angebe ändert das nichts an meinem Fehler. Habe in der Doku dazu gelesen, aber daraus auch keinen Lösungsweg gefunden. Uns würde vorgegeben damit zu arbeiten.
Du hast also einen Pfad namens '/Users/Docments/Python' in dem sich die Datei Formeln.py befindet (ist das Docments eigentlich ein Schreibfehler oder eine 8-Zeichen-Konvention?). Modulnamen sollten nach dem Style Guide for Python Code zwar nur aus Kleinbuchstaben bestehen, aber ein echter Fehler ist deine Benennung nicht.

Das "import Formeln" funktioniert anscheinend, zumindest hast du uns keine Fehlermeldung an der Stelle benannt.

Nehmen wir mal an, in der Datei Formeln.py befände sich eine Funktion namens do_something. Ich habe den starken Verdacht, dass du jetzt direkt versuchst do_something() auszuführen. Durch den Import werden aber die Funktionen nicht in den Namensraum des Aufrufers übernommen. Der Aufruf muss folglich mit Formeln.do_something() erfolgen.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Danke für deine Antwort /me. Genau in dem Pfad befindet sich die Datei (es handelt sich um einen Schreibfehler bei Documents). Okay, danke den Style Guide werde ich mir mal genauer anschauen. Ja der import hat funktioniert und es hat sich um den Fehler, den du weiter unten beschrieben hast gehandelt.
Wenn ich es so Aufrufe wie von dir beschrieben, funktioniert es einwandfrei. Ich wusste nicht, das man den Modulnamen am Anfang setzen muss und dann erst die Funktion aufrufen kann.
Das hat mir sehr weitergeholfen. Danke! :)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

duodiscus hat geschrieben:Ich wusste nicht, das man den Modulnamen am Anfang setzen muss und dann erst die Funktion aufrufen kann.
Du kannst die Funktion auch direkt in den Namensraum holen. In dem Fall brauchst du den Modulnamen nicht

Code: Alles auswählen

from Formeln import do_something

do_something()
Vereinzelt sieht man auch Code der Art "from os import *". Damit holt man direkt alles aus dem Modul in den globalen Namensraum. Das wirkt ungemein praktisch, ist aber in Wahrheit recht übel, da man damit komplett die Kontrolle darüber verliert, was man jetzt eigentlich wirklich im Zugriff hat. Das Modul os ist auch direkt ein gutes Beispiel, denn mit einem Sternchenimport hat man sich plötzlich die eingebaute open-Funktion durch open aus os überschrieben und wundert sich dann über anscheinend unerklärliche Fehler.
Antworten