Seite 1 von 1

NameError

Verfasst: Sonntag 20. August 2017, 18:07
von Kevin1995
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.

Re: NameError

Verfasst: Sonntag 20. August 2017, 18:16
von Sirius3
@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.

Re: NameError

Verfasst: Sonntag 20. August 2017, 18:52
von Kevin1995
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.

Re: NameError

Verfasst: Sonntag 20. August 2017, 18:55
von Kevin1995
Habe den Fehler gefunden. In Zeile 2 steht nur "mark" und nicht "marke"

Re: NameError

Verfasst: Sonntag 20. August 2017, 20:15
von Kevin1995
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.

Re: NameError

Verfasst: Sonntag 20. August 2017, 20:23
von __deets__
Du musst schon richtig abschreiben. Da fehlt ein Plus vor dem Self.

Re: NameError

Verfasst: Sonntag 20. August 2017, 21:31
von Sirius3
@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)

Re: NameError

Verfasst: Montag 21. August 2017, 09:36
von Kevin1995
Ich werde mir das so aneigenne Sirius das sieht auch viel besser aus vielen dank