Object has no attribute

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
Reformed
User
Beiträge: 1
Registriert: Donnerstag 24. Januar 2019, 09:13

Guten Tag die Herren,

ich möchte mich gerne einmal wissen, was genau diesen Fehler hervorruft.

Code: Alles auswählen

123 21:56:15449 :: Traceback (most recent call last): 
  
0123 21:56:15449 :: File "networkModule.py", line 247, in SetGamePhase 
  
0123 21:56:15450 :: File "game.py", line 99, in __init__ 
  
0123 21:56:15450 :: File "interfaceModule.py", line 287, in MakeInterface 
  
0123 21:56:15450 :: File "interfaceModule.py", line 170, in __MakeWindows 
  
0123 21:56:15450 :: File "uiCharacter.py", line 74, in __init__ 
  
0123 21:56:15450 :: File "ui.py", line 2902, in __init__ 
  
0123 21:56:15450 :: File "ui.py", line 101, in __init__ 
  
0123 21:56:15450 :: File "uiCharacter.py", line 154, in Hide 
  
  
  
0123 21:56:15450 :: AttributeError 
0123 21:56:15450 :: : 
0123 21:56:15450 :: 'CharacterWindow' object has no attribute 'chDetailsWnd' 
0123 21:56:15450 :: 

Zu erst: "'CharacterWindow' object has no attribute 'chDetailsWnd' " heißt dass, ich muss in Zeile 154 der Datei uiCharacter.py nachschauen? Wenn ja, wieso werden mir oben noch andere Dateien genannt?

Muss ich chDetailsWnd einfach noch bestimmen sprich self. chDetailsWnd.

Bitte korrigiert mich wenn ich falsch liege und ich bin für alle Tipps dankbar!
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Reformed: Ja, das heisst das, Du musst in `uiCharacter.py` in Zeile 154 in einer `Hide`-Funktion oder -Methode schauen um die Zeile zu sehen, in der diese Ausnahme ausgelöst wird.

Alles davor sind die Aufrufe die bis zu der Ausnahme führen. Oft liegt das Problem nicht an der Stelle wo die Aufnahme auftritt, sondern irgenwo weiter oben in der Aufrufhierarchie, und dann ist das praktisch zu wissen von wo die Funktion oder Methode aufgerufen wurde.

Hier wurde ja richtig schön gründlich gegen die Namenskonventionen von Python benannt. Funktion oder Methode die wie Klassen geschrieben werden sieht man nicht so oft. Schau mal in den Style Guide for Python Code.

Zudem solltest Du doppelte führende Unterstriche loswerden sofern die nicht tatsächlich dafür genutzt werden wofür sie gedacht sind: Vermeidung von Namenskollisionen bei Mehrfachvererbung. Das ist *nicht* ``private`` aus anderen Programmiersprachen. *Dafür* verwendet man in Python die Namenskonvention das alles was mit *einem* Unterstrich beginnt, nicht Teil der öffentlichen API ist.

`chDetailsWnd` ist kein guter Name für Details von Schweizer Winden. Falls das etwas anderes bedeuten sollte: Weg mit den Abkürzungen. `character_details_window` wäre das wahrscheinlich in Python – wenn ich die Abkürzungen richtig geraten habe. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__: wenn der TE so komplexen Code der sich ueber so viele Sourcen erstreckt nicht in der Lage ist, einem solchen Fehler auf die Spur zu kommen - dann bezweifel ich ja, dass er den Code verbrochen hat, und entsprechend auch nicht wirklich was fuer die Namen kann.

Es scheint sich um eine Game-Engine zu handeln, METIN2 oder so. https://en.metin2.gameforge.com/
https://metin2dev.org/board/index.php?/ ... orywindow/

@Reformed: das ist eine komplexe und sehr spezielle Umgebung die du da hast. Wenn ich das richtig ueberreisse, dann ist das ein sehr komplexes Setup zu dem man nur was sagen kann, wenn man es kennt. Was hier aller Wahrscheinlichkeit nach keiner tut. Ich wuerde dir darum empfehlen, in dem in meinem Link oben benannten Forum um Hilfe zu bitten. Da kennen die Leutz sich aus.
Antworten