NameError

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
Kevin1995
User
Beiträge: 5
Registriert: Sonntag 20. August 2017, 17:59

Hey Leute ich bin sehr neu hier und beschäftige mich seit einer Woche mit Python und dem Raspberry Pi 3.
Einige hürden konnte ich selbst meistern und bin jetzt auf ein Problem gestoßen woraus ich nicht schlau werde.
Ich habe den Code 1:1 aus einem Tutorial aber er läuft nicht.

Code: Alles auswählen

class Motorrad():
    def __init__(self, mark, hubraum):
        self.marke = marke
        self.__hubraum = hubraum
        
    def set_hubraum(self, kubik):
        if (kubik <= 0):
            print("Error : Negativer Wert für den Hubraum! \
Der Wert wurde nicht geändert")
        else:
            self.__hubraum = kubik
            print("Hubraum wurde geändert")
                
    def get_hubraum(self):
        return self._hubraum
FEHLERMELDUNG

toeff = Motorrad("Yamaha", 600)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
File "/home/pi/Desktop/pythonbuch/Motorrad.py", line 3, in __init__
self.marke = marke
NameError: name 'marke' is not defined

Ich habe schon gegoogelt aber ich finde nichts verwertbares und hoffe nun das ihr mir helfen könnt.
Zuletzt geändert von Anonymous am Sonntag 20. August 2017, 18:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kevin1995: schau Dir die Schreibweise genau an. Zwei Unterstriche für das Attribut __hubraum sind hier falsch. Die Klammern beim if in Zeile 7 gehören weg. Zeilenumbrüche mit \ sind potentielle Fehlerquellen, besser String mit "..." "..." zusammensetzen. Zeile 15 enthält auch noch einen Schreibfehler.
Kevin1995
User
Beiträge: 5
Registriert: Sonntag 20. August 2017, 17:59

Vielen Dank für die schnelle Hilfe. Bei den klammer habe ich bestimmt an JAVA gedacht und nicht an Python. er Meckert aber dennoch das dass Objekt marke nicht definiert sein soll. Den Schreibfehler in Zeile 15 sehe ich nicht. Muss dort der unterstrich weg? Es ist echt schwer als Neuling wenn man sich durch ein Tutorial liest was fehlerhaft ist diese Fehler zu bemerken und zu entfernen. Wobei ich zugeben muss, dass ich manchmal den Wald vor lauter Bäumen nicht sehe. Aber dafür bin ich ja in dem Forum, damit mir geholfen werden kann. Dafür nochmals danke.
Kevin1995
User
Beiträge: 5
Registriert: Sonntag 20. August 2017, 17:59

Habe den Fehler gefunden. In Zeile 2 steht nur "mark" und nicht "marke"
Kevin1995
User
Beiträge: 5
Registriert: Sonntag 20. August 2017, 17:59

Also das Tutorial was ich verwende ist offensichtlich fehlerhaft.

Code: Alles auswählen

class  Fahrzeug:
    def __init__(self, marke, hubraum, leistung):
        self.marke = marke
        self.hubraum = hubraum
        self.leistung = leistung
        
    def get_infos(self):
        return "Marke: " + self.marke + ", Hubraum: " \
    str(self.hubraum) + ", Leistung: " + str(self.leistung)
        

class Personenwagen(Fahrzeug):
                pass
            
class Lastwagen(Fahrzeug):
                pass

pw = Personenwagen("Opel", 222, 100)
lkw = Lastwagen("Mercedes", 5000, 300)
print(pw.get_infos())
zeile 9 meckert er das dies ein ungültiger Syntax wäre wenn ich str(Self.hubraum) schreibe. Aber ich muss den hubraum doch in einen String umwandeln da dieser ja als int definiert ist. Ohne str meckert er auch.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst schon richtig abschreiben. Da fehlt ein Plus vor dem Self.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kevin1995: schlechtes Tutorial, wenn da von privaten und protected Attributen die Rede ist. Das ist einfach falsch. Backslashes sollte man vermeiden, fast immer geht das Du Klammern. Im Beispiel würde sich sowieso .format anbieten, Tutorials, die + propagieren, um Strings zusammenzustückeln, sind auch nicht gerade vertrauenswürdig:

Code: Alles auswählen

    def get_infos(self):
        return "Marke: {}, Hubraum: {}, Leistung: {}".format(
            self.marke, self.hubraum, self.leistung)
Kevin1995
User
Beiträge: 5
Registriert: Sonntag 20. August 2017, 17:59

Ich werde mir das so aneigenne Sirius das sieht auch viel besser aus vielen dank
Antworten