Hilfe Neuling

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

Hallo bin Neuling in Python und habe ein problem mit dem in nicht weiterkomme.

In einen vorgeschriebenen Script (multiplexer) kommt immer ein Fehler der sich für mich nicht nachvollziehen lässt.
Bitte um Hilfe.

um folgendes Script handelt es sich:

http://www.instructables.com/files/orig ... EY3A4PS.py

es kommt ein Fehler in der Zeile 948

NameError: name 'multiplexer' is not defined

usw.

somit startet das Script auch nicht.

Für Begrifflichkeiten bitte ich als Neuling um entschuldigung!!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum und zu Python!

Das Script benoetigt noch ein weiteres Modul "LEDcubeCore". Da ich das leider nicht finden kann, kann ich auch nicht sagen, dass es der definitive Grund fuer den Fehler ist, aber ich nehme stark an, dass es nicht installiert ist.
Benutzeravatar
kbr
User
Beiträge: 1506
Registriert: Mittwoch 15. Oktober 2008, 09:27

Das Problem entsteht schon in Zeile 891. Sprich mal mit dem Autor des Skriptes, warum die entsprechende Klassen-Implementierung oder der Import fehlt.
BlackJack

@golfbubi: Mach aus dem nackten ``except:`` ein paar Zeilen davor mal ein ``finally:`` — dann bekommst Du die Ausnahme die zum Abbruch des Programms führt auch zu sehen. Wieder mal ein schönes Beispiel warum ``except:``\s ohne konkrete Ausnahmen beziehungsweise Ausnahmebehandlung die Ausnahmen einfach durch ein „hier hat was nicht funktioniert“-``print`` ersetzen sch*#&… sind.

Der Sternchen-Import ist auch nervig. Ohne das Modul zu kennen kann man jetzt nicht sagen ob Namen die nirgends definiert sind, wie `points` nun ein Programmierfehler sind oder tatsächlich aus diesem Modul kommen.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

Danke für die schnelle beantwortung

das modul liegt unter

http://www.instructables.com/files/orig ... EY3A4PG.py

Danke
Benutzeravatar
kbr
User
Beiträge: 1506
Registriert: Mittwoch 15. Oktober 2008, 09:27

@golfbubi: Nun hast Du schon mehrere unterschiedliche Antworten erhalten, da das Skript mit einem "nackten" except und einem Sternchen-Import zwei Dinge macht, die in Python aus gutem Grund unterlassen werden sollten: Es erschwert die Fehlersuche und führt ggf. sogar zu Seiteneffekten.
Prüfe zunächst einmal, ob LEDcubeCore installiert ist und importiert werden kann (wie cofi schon schrieb).
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das 2. Skript muss zu "LEDcubeCore.py" umbenannt werden und im selben Verzeichnis wie das andere Skript liegen. Damit sollte es funktionieren.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

Es will einfach nicht funktionieren. Ich verstehe nicht wirklich viel von Python da ich quasi wirklich in den Kinderschuhen stehe.

Die Lösungen die mir vorgeschlagen wurden ,,mit except,, und der Dateiumbennenung ergaben den gleichen fehler wie Anfang´s

root@raspberrypi:/home# sudo python LEDcube.py
Initializing multiplexer...
Quitting due to unknown error, details are as follows:
Traceback (most recent call last):
File "LEDcube.py", line 948, in <module>
multiplexer.register1.clear()
NameError: name 'multiplexer' is not defined

Das einzige was ich nicht verstanden habe is Modul installieren?

Den Autor des Scriptes kenne ich nicht und kann ihn auch nicht kontaktieren.
Danke
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Offensichtlich hast du nicht das gemacht, was ich dir gesagt habe. Mehr kann ich dir mit den Infos nicht sagen.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

@cofi

Also die beide Scripte liegen im gleichen Verzeichniss )/home/pi und sind von vorne herein so benannt gewesen. Da ich mich wie ich schon sagte in keinsterweise nur im geringsten maße mit python auskenne hatte ich hier auf Hilfe gehofft. Schade


@all

Falls jemand doch noch einen hilfe Suchenden einen tipp geben kann findet die beiden Dateien und das um was es geht unter

http://www.instructables.com/id/Raspber ... /?ALLSTEPS

danke
BlackJack

@golfbubi: Das ``except:`` durch ein ``finally:`` ersetzen hätte die eigentliche Fehlermeldung inklusive Traceback bringen sollen. Du behauptest aber es hätte sich dadurch nichts geändert, was nicht sein kann.

Ansonsten ist halt auch die Frage wieviel Sinn es macht sich mit Python-Quelltext zu beschäftigen ohne Python zu können. Und wenn das da nicht tut, wäre der erste Ansprechpartner wohl der Autor von dem Code. Wir kennen den ja auch nicht. (Also den Code.)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das kann so allerdings nicht sein, denn wenn das Modul richtig benannt wird, gibt es eben `multiplexer` und der NameError kann nicht auftreten.

Verschieben mal das `try:` aus Zeile 889 in Zeile 896 (d.h. nach den .clear() Aufrufen) und zeige uns den Fehler der dann auftritt.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

@cofi

Also das habe ich getan:

"""---------------MAIN FUNCTION----------------"""

#setup multiplexer and shift registers
multiplexer = multiplexer()

#clear the shift registers
multiplexer.register1.clear()
multiplexer.register2.clear()

try:
#wait for ENTER to be pressed (the variable is never used, so I gave it a fun name!)
print " "


das kam raus:


root@raspberrypi:/home/pi# python LEDcube.py
File "LEDcube.py", line 891
multiplexer = multiplexer()
^
IndentationError: unexpected indent
BlackJack

@golfbubi: Den Originalcode nehmen und aus dem besagten ``except:`` ein ``finally:`` machen ist weniger fehleranfällig. Und wieso ist `multiplexer` auf der rechten Seite der Zuweisung plötzlich klein geschrieben? Im Original fängt das mit einem Grossbuchstaben an.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

so jetzt habe ich alles geändert, die Distribution mehrfach gewechselt und der Fehler bleibt der gleiche

Initializing multiplexer...
Quitting due to unknown error, details are as follows:
Traceback (most recent call last):
File "LEDcube.py", line 948, in <module>
multiplexer.register1.clear()
NameError: name 'multiplexer' is not defined

auch mit finally: statt dem except:

Was heißt das eigentlich immer mit dem multiplexer fehler ? kennt das script den Befehl nicht oder

der autor des Script´s habe ich mittlerweile auch kontaktiert und er hat auch keinen Rat und versteht es nicht, da es bei Ihm und anderen problemlos funktioniert.

sind den irgendwelche Module außer dem gpio python noch notwendig?

es ist nur ägerlich das das ganze was am Raspi dranhängt nich funktioniert und ich im Netz auch keine alternative dazu finden kann.

vielleicht hat hier irgendjemand noch eine geniale Idee dazu.

Vorab schon mal an alle Danke für die zwar nicht erfolgreiche Hilfe :-)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist kein Befehl, sondern das Ergebnis aus genau der Zeile davor: multiplexer = Multiplexer(). Hat also auch nichts mit Distributionen oder aehnlichem zu tun.

Ich kann mir schwer vorstellen, dass du da nicht selbst einen Fehler eingebaut hast. Poste doch mal bitte *deinen* Code, und zwar genau so wie er auf dem PI (nicht) laeuft.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

@_deets_

Schau doch mal bitte im dritten oder viert post von mir, dort findest du den Link zu dem Bauwerk incl. den beiden Python Files.

Diese beiden habe ich auf dem Raspi in den Home und anderen ordner kopiert.

aber es will einfach nicht starten.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich hab' deine Posts schon genau gelesen, und auch die Dateien angeschaut - und dort ist es klar, dass dieser Fehler so *NICHT* vorkommen kann. Du musst also einen Fehler produziert haben in den Dateien, die DU auf deinem Rechner hast. Darum habe ich darum gebeten, dass du die hier postest.
golfbubi
User
Beiträge: 14
Registriert: Mittwoch 11. November 2015, 10:00

@_deets_

Ich stehe gerade auf dem Schlauch und verstehe Bahnhof

ich habe die beiden Dateien so wie ich sie gedownloadet habe auf den raspi kopiert.

welche dateien auf den Rechner?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

"Der Rechner" == "raspi". Und wenn die Fehlermeldung, die du bekommst, stimmt (und sie sieht ja "gut" aus im Sinne von sie ist nachvollziehbar mit den original Quellen, die Zeilennummer stimmt usw.), dann muss deine Kopie auf dem Rechner/raspi *falsch* sein, denn im Original Quellcode steht

Code: Alles auswählen

try:
    #setup multiplexer and shift registers
    multiplexer = Multiplexer()
    
    #clear the shift registers
    multiplexer.register1.clear()
und damit ist multiplexer an der Stelle, wo es bei dir hakt (letzte Zeile in dem Snippet) im Original 3 Zeilen vorher definiert worden. Es kann also nicht sein, dass du diesen Fehler bekommst, *AUSSER* dein Code sieht anders aus. Und darum sollst du ihn hier zeigen. Wieviel deutlicher kann man das ausdruecken? :K
Antworten