NameError: name '...' is not defined

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
Fiffio
User
Beiträge: 33
Registriert: Donnerstag 21. Februar 2019, 21:20

Hallo,

mein Problem bezieht sich auf dieses Script (das nicht von mir ist):
(GitLab) https://framagit.org/jkepler/TaxingLots ... ingLots.py

in Zeile 371 kommt diese Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "TaxingLots.py", line 371, in <module>
    print "    %s    -%s %s {%.2f USD} [%s] @ %.2f USD" % (reduction_account, reduction, reduction_unit, lot_price, lot_date, reduction_price)
NameError: name 'reduction_account' is not defined
In Zeile 165 ist doch die Definition?

Code: Alles auswählen

def reduce_lot(stack, reduce_stack):

reduction_price, reduction_account = convert_to_USD(strip_AZ(reduce_stack[0][3])), reduce_stack[0][4]
Was ich über „NameError: name '...' is not defined“ las, kann es wohl mit verschiedenen Python Versionen zu tu haben. Ich habe (Python 2.7.15rc1 und Python 3.6.7 auf xUbuntu 18.4)

Kann mir jemand sagen, was ich machen könnte?

Danke.

PS: Ich bin Anfänger.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ein Denkanstoß, wieso steht diese denn in einer Funktion wenn sie in 371 gebraucht wird?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Fiffio
User
Beiträge: 33
Registriert: Donnerstag 21. Februar 2019, 21:20

Da bin ich überfragt. Mit den Testdaten (Inputfile) vom Ersteller des Scripts, funktioniert das Script. Nur mit meinen InputDaten nicht.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn die Bedingung in Zeile 344 nicht erfüllt ist, `float(m.group(1)) == float(reduce_stack[0][1])`, dann wird `reduction_account` nicht definiert. Auch sonst ist das Skript nicht gerade gut geschrieben.
Fiffio
User
Beiträge: 33
Registriert: Donnerstag 21. Februar 2019, 21:20

Ok, danke für die Antworten!
Das Script übersteigt im Moment auf jeden Fall meine Kapazitäten, in Können und Zeit.

Dann würde ich gerne fragen, wenn ich das von jemand ordentlich machen lasse, was wäre das für ein Aufwand? Wie viele Stunden oder wie man das am besten bemisst. Oder soll ich das extra im Offtopic Forum fragen?
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Fiffio: Das ist alles ziemlich unübersichtlich und ”unpythonisch”. Der Autor schreibt in der README ja selbst, dass das sein erstes Python-Programm ist. Dann werden da ganz viele Informationen in Listen zusammengefasst und als Zeichenketten verarbeitet die besser mindestens in `collections.namedtupel()` stecken sollten und innerhalb des Programms als Datentypen repräsentiert werden sollten die zum Inhalt passen. Was da momentan an magischen Indexwerten im Quelltext steht ist schwer nachzuvollziehen.

Ich sehe auch keinen einfachen Fix weil da an einer Stelle der Wert von `reduction_account` verwendet wird, an der davon ausgegangen wird, dass es den geben muss, ich aber nicht sehe warum man davon ausgehen kann. Und selbst wenn es ihn gibt, kann das immer der gleiche/einer von einem vorherigen Schleifendurchlauf sein. Das gilt für den gesamten Inhalt von `linfo` der da jeweils auf einzelne Namen verteilt wird. Wäre das okay oder ist das ein Fehler der bloss noch nicht aufgefallen ist?

Sollte der Vergleich in Zeile 344 denn zutreffen? Hier könnte auch zusätzlich noch das Problem drin stecken, dass man Gleitkommazahlen besser nicht auf exakte Gleichheit prüfen sollte, weil die je nach dem wie sie zustande gekommen sind, zwar numerisch gesehen gleich sein müssten, es aber wegen der Ungenauigkeiten die dem Format anhaften nicht so ganz sind.

Letztlich hast Du doch aber eine Webseite mit Repository vom Autor und der Möglichkeit dort Issues zu erstellen und/oder den Autor zu kontaktieren. Der weiss sicher am besten wie er mit seinem Code zurecht kommt. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Fiffio
User
Beiträge: 33
Registriert: Donnerstag 21. Februar 2019, 21:20

__blackjack__ hat geschrieben: Freitag 22. Februar 2019, 13:38 @Fiffio: Das ist alles ziemlich unübersichtlich und ”unpythonisch”. Der Autor schreibt in der README ja selbst, dass das sein erstes Python-Programm ist. ... Ich sehe auch keinen einfachen Fix...
Danke für die Rückmeldung. Das hört sich so an, als ob man besser neu startet.
__blackjack__ hat geschrieben: Freitag 22. Februar 2019, 13:38 Letztlich hast Du doch aber eine Webseite mit Repository vom Autor und der Möglichkeit dort Issues zu erstellen und/oder den Autor zu kontaktieren...
Hatte beim Autor schon angefragt.
Man könnte wegen mir die getrates() function "rates.csv" (Währungsumrechnungen) weglassen.
Da ich das aber bis Anfang nächster Woche bräuchte, habe ich mich für eine andere Variante entschieden. (Direkt mit dem ledger/beancount plaintextaccounting, auf dem auch das pyScript aufbaut.)
Ich hab das ganze unterschätzt, melde mich wieder wenn es aktuell ist.
Antworten