Seite 1 von 1

Probleme mit einem alten Python Skript

Verfasst: Dienstag 14. Oktober 2008, 11:41
von Gingi
Hallo Leute!

Ich bin ganz neu in der Python-Umgebung und somit noch blutiger Anfänger. Hab zwar relativ viel Programmiererfahrung (c/c++/c#, java etc), aber ich bin hier echt am verzweifeln.

Habe vor mir ein python Programm (Converter), welches über die Kommandozeile ein Programm aufruft. Verstehen kann ich den kompletten Code ohne Probleme. Jetzt gibt es noch eine 2. Datei (ConvTools) mit mehreren Klassen drinnen.

Dort habe ich eine zusätzliche Klasse hinzugefügt, um diese in Converter verwenden zu können.

Im Converter habe ich "from convtools import *" um eben diese Klassen dem Package hinzuzufügen (zumindest hätte ich das so verstanden.

Jedoch bekomme ich jetzt immer einen Fehler, wenn ich auf meine neue Klasse zugreifen möchte.

Der Fehler lautet: Name Error: global name xxx is not defined.

Ich komme einfach nicht weiter.

mfg

Gingi

PS: hätte die Suche schon probiert nur weiß ich nicht so recht nach was ich suchen sollte :)

Verfasst: Dienstag 14. Oktober 2008, 12:18
von snafu
Und hier wohl keiner auf was er antworten soll, so ganz ohne Code...

Verfasst: Dienstag 14. Oktober 2008, 12:19
von querdenker
Wie snafu schon schrieb: Ohne Code können wir dir da auch nicht weiterhelfen. Außerdem macht man keine *-Importe mehr.

Verfasst: Dienstag 14. Oktober 2008, 12:37
von BlackJack
@Gingi: Die Beschreibug ist in sich schon nicht stimmig. Wenn die Datei `ConvTools.py` heisst, dann stimmt der Import von `convtools` nicht.

Ansonsten heisst das wahrscheinlich, dass es im Modul `convtools` keine Klasse mit dem Namen `xxx` gibt, denn falls dort eine solche gäbe, hätte der Import diesen Namen in den Namensraum des importierenden Moduls geholt.

Falls Du den betreffenden Quelltext nicht zeigen möchtest oder darfst, versuche das Problem doch einfach mal mit einem Beispiel nach zu stellen.

Verfasst: Dienstag 14. Oktober 2008, 14:49
von numerix
querdenker hat geschrieben:Außerdem macht man keine *-Importe mehr.
Was ist das denn für ein Satz?! :roll:

Verfasst: Dienstag 14. Oktober 2008, 16:53
von keppla
numerix hat geschrieben:
querdenker hat geschrieben:Außerdem macht man keine *-Importe mehr.
Was ist das denn für ein Satz?! :roll:
Ein wahrer? Worauf willst du hinaus?

Verfasst: Dienstag 14. Oktober 2008, 17:03
von Leonidas
numerix hat geschrieben:
querdenker hat geschrieben:Außerdem macht man keine *-Importe mehr.
Was ist das denn für ein Satz?! :roll:
Also in meinem Gehirn wird der geparst und die Semantik führt nicht zu Exceptions.

Verfasst: Dienstag 14. Oktober 2008, 17:24
von numerix
keppla hat geschrieben:
numerix hat geschrieben:
querdenker hat geschrieben:Außerdem macht man keine *-Importe mehr.
Was ist das denn für ein Satz?! :roll:
Ein wahrer? Worauf willst du hinaus?
Nein, kein wahrer.

Die Aussage ist falsch, wenn sie - so wie hier - ("man", "keine ... mehr") als pauschale Aussage ohne Berücksichtigung des konkreten Codes quasi als Axiom hingestellt wird. (Was leider alle Nase lang im Forum passiert).

Ja, es gibt gute Gründe, in vielen (vermutlich den meisten) Fällen, auf Sternchenimporte zu verzichten. Das kann man in zahlreichen Threads auch nachlesen. Aber der Satz "man macht es nicht mehr" ist einfach kein guter Satz. Wer genau weiß, was er importiert, und sich bewusst ist, welche Auswirkungen das hat, der kann guten Gewissens auch mit Sternchen importieren.

Verfasst: Dienstag 14. Oktober 2008, 17:31
von Leonidas
numerix hat geschrieben:Wer genau weiß, was er importiert, und sich bewusst ist, welche Auswirkungen das hat, der kann guten Gewissens auch mit Sternchen importieren.
Also wenn man weiß dass man es falsch macht, dann darf man es ruhig falsch machen?

Also ganz ehrlich, sinnvolle Gründe für *-Imports kann man an einer Hand abzählen, selbst nachdem ein Großteil der Finger amutiert wurde. Also ganz selten. Daher ist es durchaus vertretbar, Leuten mit weniger Ahnung zu sagen, dass es keine gute Idee ist. Das ist etwas parallel zu l2tabu - einige Dinge sollte man vermeiden und natürlich haben sie ihren Grund aber den immer dazuzuschreiben ist für Anfänger eben selten besonders informativ noch zielführend. Wenn es ihn interessiert, steht es ihm ja frei nachzufragen.

Verfasst: Dienstag 14. Oktober 2008, 17:46
von numerix
Leonidas hat geschrieben:
numerix hat geschrieben:Wer genau weiß, was er importiert, und sich bewusst ist, welche Auswirkungen das hat, der kann guten Gewissens auch mit Sternchen importieren.
Also wenn man weiß dass man es falsch macht, dann darf man es ruhig falsch machen?
Also, ich denke, du weißt, was ich meine.

Ich will mich jetzt auch nicht (erneut) dazu auslassen; das habe ich in einem anderen Thread schonmal getan (im Zusammenhang mit dem "bösen" input() ...). Hat mich halt aufgeregt der Satz von querdenker ... :x

Verfasst: Dienstag 14. Oktober 2008, 17:49
von snafu
os.system, os.system! :)

Verfasst: Dienstag 14. Oktober 2008, 17:58
von BlackJack
@snafu: Nee das ist doof. os.popen und os.popen2-4 rockt! :-)

Verfasst: Dienstag 14. Oktober 2008, 21:05
von name
BlackJack hat geschrieben:@snafu: Nee das ist doof. os.popen und os.popen2-4 rockt! :-)
subprocess!

Verfasst: Dienstag 14. Oktober 2008, 22:19
von Leonidas
name hat geschrieben:
BlackJack hat geschrieben:@snafu: Nee das ist doof. os.popen und os.popen2-4 rockt! :-)
subprocess!
[ ] Du hast den Witz verstanden

;)

Verfasst: Dienstag 14. Oktober 2008, 23:21
von veers
Das mit dem poppen ist immer so Problematisch. Da muss man aufpassen das es keinen Fork gibt!

Verfasst: Dienstag 14. Oktober 2008, 23:50
von BlackJack
Jaja, und wenn man die Kinder dann nicht ordentlich behandelt, werden sie zu Zombies und müssen gekillt werden. ;-)

Verfasst: Mittwoch 15. Oktober 2008, 07:11
von birkenfeld
numerix hat geschrieben:
keppla hat geschrieben:
numerix hat geschrieben:
querdenker hat geschrieben:Außerdem macht man keine *-Importe mehr.
Was ist das denn für ein Satz?! :roll:
Ein wahrer? Worauf willst du hinaus?
Nein, kein wahrer.

Die Aussage ist falsch, wenn sie - so wie hier - ("man", "keine ... mehr") als pauschale Aussage ohne Berücksichtigung des konkreten Codes quasi als Axiom hingestellt wird. (Was leider alle Nase lang im Forum passiert).
[/code]
Ack.