2017-06-07 1 views
-1

ich zur Zeit ein Problem mit meinem Text-Adventure-Code habe, läuft das Programm vollkommen in Ordnung, aber wenn der Charakter sterben aufwickelt, ruft das Programm diese Fehler:Wie ein NoneType Fehler passiert

NextSceneName = CurrentScene.enter() 
AttributeError: 'NoneType' object has no attribute 'enter' 

Die Programm wird danach abstürzen, was keine große Sache für sich ist.

Der Code für diesen Teil des Programms ist:

def play(self): 
     CurrentScene = self.sceneMap.OpeningScene() 
     LastScene = self.sceneMap.NextScene('Finished') 

     while CurrentScene != LastScene: 
      NextSceneName = CurrentScene.enter() 
      CurrentScene = self.sceneMap.NextScene(NextSceneName) 

     CurrentScene.enter() 

Was will ich weiß, ist, wie kann ich so etwas wie eine If-Anweisung verwenden oder einen Try Außer Aussage der NoneType/Attribute passieren?

+0

von Ihrem Code kann ich sagen, dass, wenn Sie 'if..else' Block dann wird es immer zu' else' gehen und wenn Sie 'try..except' Blockflusskontrolle verwenden geht immer zu außer Block, weil Sie versuchen, auf die Methode 'enter()' zuzugreifen, die für Ihr Klassenobjekt 'CurrentScene' nicht verfügbar ist, sollten Sie angeben, was das ist oder ob Sie tatsächlich bei jedem Testfall ausgegeben wurden? Wenn Sie Probleme mit der Ausgabe haben, dann schreiben Sie Ihre Wunschausgabe. – Gahan

+0

Derzeit habe ich die gewünschte Ausgabe, die ich brauche, da das Text-Abenteuer in der richtigen Reihenfolge ist, alles, was ich tun möchte, ist den Fehler vollständig übergeben, so dass es nicht erscheint, wenn eine Todesszene passiert – user8119607

+0

oh! Verwenden Sie dann Ihre Anweisung in try block und action on failure in außer block for statement, wo Sie die Möglichkeit haben, einen Fehler zu erhalten. – Gahan

Antwort

0

Zuerst muss CurrentScene als None ausgewertet werden, deshalb erhalten Sie den Fehler. Der kluge Schachzug wäre, um herauszufinden, warum ist, dass wenn Happening nicht

erwartet werden

Aber, wenn Sie diese Ausnahme fangen wollen, ersetzen Sie die letzte Zeile CurrentScene.enter() mit diesem:

try: 
    CurrentScene.enter() 
except AttributeError: 
    dosomething() 

Oder wenn Sie wollen fangen, dass alle, bevor Sie versuchen, „Enter“, können Sie dies tun:

if CurrentScene == None: 
    dosomething() 

Wenn das nicht es wahrscheinlich nicht funktioniert, weil Sie auch CurrentScene.enter() innerhalb der while-Schleife aufrufen werden, so tun sie es stattdessen

+0

Was passiert, wenn er keine Methode hat() für CurrentScene? – Gahan

+0

Dann erscheint es als 'NoneType' in dem Fehler? nein –

+0

Ich habe versucht, CurrentScene.enter() außerhalb der While-Schleife zu platzieren. Das führte nur zu einem neuen Fehler, einem NameError, der besagt: "Name 'CurrentScene' ist nicht definiert" Ich werde einen Riss in der if-Anweisung haben, sehen, ob das funktioniert – user8119607