2017-04-04 5 views
0

Ich habe eine Datei namens app.py. Es gibt eine Klasse namens EchoWebSocket. unter dem EchoWebSocket schrieb ich eine Funktion mit dem Namen on_message. Ich bekomme hier eine JSON-ähnliche Daten, Nachricht = {Typ: 'Login', Name: 'xyz'} aus dem JavaScript-Frontend. Ich habe eine globale Variable namens Daten deklariert. Jetzt möchte ich die Nachricht analysieren und in der globalen Variablen Daten über einen Ausnahmebehandlungsblock gespeichert. Aber ich bekomme einen Fehler namens ** raise NotImplementedError **. Unten ist mein Python-Code, ich bin neu in diesen Technologien, bitte hilf mir, dieses Problem zu lösen.Wie kann ich lösen NotImplementedError in Python3.6 lösen

/app.py

class EchoWebSocket(WebSocketHandler): 

    clients = [] 

def open(self): 
    logging.info('WebSocket opened from %s', self.request.remote_ip) 
    EchoWebSocket.clients.append(self) 

def on_message(self, message): 
    #logging.info('got message from %s: %s', self.request.remote_ip, message) 
    logging.info('message %s:', message) 
    global data 
    try: 
     data = JSON.parse(message) 
    except MyError as e: 
     logging.info("Invalid JSON") 
     data = {} 

/Error

[I 170404 11:35:30 web:1971] 304 GET/(127.0.0.1) 1.58ms 
[I 170404 11:35:30 web:1971] 304 GET /static/js/client.js (127.0.0.1) 3.28ms 
[E 170404 11:35:34 websocket:415] Uncaught exception in /ws 
    Traceback (most recent call last): 
     File "/usr/local/python3.6/lib/python3.6/site-packages/tornado/websocket.py", line 412, in _run_callback 
     callback(*args, **kwargs) 
     File "/usr/local/python3.6/lib/python3.6/site-packages/tornado/websocket.py", line 255, in on_message 
     raise NotImplementedError 
    NotImplementedError 
+0

Ihr 'versuchen ... except' Block eingerückt mit 2 Leerzeichen, was sehr wahrscheinlich SyntaxError verursacht. Python-Code ist immer mit 4 Leerzeichen eingerückt. NotImplementedError bedeutet, dass ein Teil der Funktionalität eines Pakets em nicht implementiert (nicht geschrieben) ist. Wenn es sich um eine Klassenmethode handelt, können Sie sie neu definieren, damit sie funktioniert. –

+0

Vier-Raum-Eindruck ist nur eine Frage der Konvention. Es gibt kein Syntaxproblem bei der Verwendung von zwei, nur ein potenzielles Problem, das den Leser verwirrt. – nigel222

+0

Zwei Leerzeichen oder vier Leerzeichen sind in Ordnung, solange Sie konsistent sind, aber es gibt ein größeres Problem: Die Zeilen 'def open' und' def on_message' sind nicht eingerückt. Wenn es so in Ihrem echten Code ist (und kein Fehler, wenn Sie es in den Stack-Überlauf kopiert haben), dann ist das das Problem. Wie hier beschrieben, definieren Sie die Funktionen open und on_message auf Modulebene, wenn Sie sie als Methoden in der Klasse EchoWebSocketHandler definieren müssen. –

Antwort

0

Mai werden Sie Methode in der Unterklasse implementieren on_close Mast

def on_close(self): 
    print("WebSocket closed")