【发布时间】:2017-04-04 06:21:00
【问题描述】:
我有一个名为 app.py 的文件。有一个名为 EchoWebSocket 的类。在EchoWebSocket下,我写了一个名为on_message的函数。我在这里得到一个类似 JSON 的数据,message = {type: 'login', name: 'xyz'} 从 javascript 前端。我声明了一个名为 data 的全局变量。现在我想解析消息并通过异常处理块将其存储在名为 data 的全局变量中。但我收到一个名为 ** raise NotImplementedError** 的错误。下面是我的python代码,我是这些技术的新手,请帮我解决这些问题。
/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 = {}
/错误
[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
【问题讨论】:
-
您的
try...except块缩进了 2 个空格,这很可能导致 SyntaxError。 Python 代码总是缩进 4 个空格。 NotImplementedError 意味着包的某些部分功能未实现(未编写)。如果它是一个类的方法,你可以重新定义它,让它工作。 -
四个空格缩进纯粹是一个约定问题。使用两个没有语法问题,只是一个潜在的人类读者混淆问题。
-
两个空格或四个空格都可以,只要你保持一致,但有一个更大的问题:
def open和def on_message行根本没有缩进。如果在你的真实代码中就是这样(当你将它复制到堆栈溢出时不是一个错误),那么这就是问题所在。正如这里所写,当您需要将它们定义为EchoWebSocketHandler类中的方法时,您正在定义模块级函数open和on_message。
标签: python python-2.7 python-3.x websocket tornado