- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类(class):
class SessionHandler(tornado.websocket.WebSocketHandler):
@tornado.gen.coroutine
def on_message(self):
yield self.application.c.check("xxx@gmail.com")
check() 函数类似于
@tornado.gen.coroutine
def check(self,id):
if id not in self.AUTH_METHOD.keys():
raise InvalidXX
InvalidXX
是一个用户定义的异常,继承自 Exception
类。
引发此异常时,tornado 控制台不会显示任何内容。但是,当我在它们周围添加 try/except 子句时,就会出现异常。我不明白为什么这个异常没有传播到控制台。其他异常(exception)MongoDB 中的重复键会传播并显示到控制台。
最佳答案
[此答案适用于 Tornado 4.4 及更早版本。从 Tornado 4.5 开始 on_message
可能是一个协程,原始问题中的代码将起作用]
协程的调用方式与常规函数不同(即它们必须使用 yield
调用)。因此,当您定义框架调用的方法时,只有当文档说“此方法可能是协程”之类的内容时,您才应该使用协程。 WebSocketHandler.on_message
可能不是协程(从 Tornado 4.3 开始)。
相反,您可以使用 IOLoop.spawn_callback
从 on_message
回调启动独立的协程。
def on_message(self, msg):
IOLoop.current().spawn_callback(process_message, msg)
@gen.coroutine
def process_message(self, msg):
...
这里的一个重要区别是 spawn_callback
将协程与接收消息的 WebSocketHandler
中的代码分离:您可能会收到第二个 on_message
调用在第一个回调中生成的回调完成之前。使用 tornado.locks
和 tornado.queues
模块中的方法来管理此并发性。 (相比之下,在 RequestHandler.data_received
中,它可能是一个协程,在处理第二个数据 block 之前,您不会获得第二个数据 block ,并且会出现未捕获的异常将中止连接)
关于python - Tornado WebSocket on_message 方法中忽略异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723830/
我正在使用discord.py 编写一个discord 机器人。我编写了一个初始版本,但我认为所有这些都需要重新组织,因此我将代码移动到不同的文件中。 代码与以前相同,但现在当我启动机器人时,机器人检
在 gui 应用程序中有 ON_MESSAGE(id, handler) 和 hanler 的 LRESULT CMainFrame::handler(WPARAM wParam, LPARAM lP
如何接收 MQTT 并将其传递给我设置的 bash 脚本?我收到的值在我发送的消息和收到消息之间不断增加,我无法判断它是否已执行 bash 脚本,并且它不会打印后面的行进行检查,所以我怀疑有什么问题之
我的代码运行正常。只有一个问题,即在调用任何命令后,我的 on_message 会立即被调用(这会导致一些副作用) async def delete_on_swear(message): if
当我将太多参数传递给f()时,为什么python不抛出错误或异常?显然,由于该错误,未执行f()。我正在使用VS-Code和python 3.8。 (如果要复制,则必须安装websocket_clie
我使用python从nodejs服务器接收流数据,使用以下python代码。websocket 应该获取实时流数据。我假设 python 的 WebSocketApp 获取流数据的唯一方法是通过 on
为什么我不能有多个 on_message 事件? import discord client = discord.Client() @client.event async def on_ready()
基本上,一切似乎都可以正常工作并启动,但由于某种原因我无法调用任何命令。我现在已经轻松地环顾四周并查看示例/观看视频,但我终生无法找出问题所在。代码如下: import discord import
我正在尝试使机器人基本上处于 sleep 模式的命令,这意味着让机器人停止响应命令(如果可能的话,或 on_messages)尝试使用 client.pause (Boolean) 但它没有给出错误我
我有以下类(class): class SessionHandler(tornado.websocket.WebSocketHandler): @tornado.gen.coroutine
假设我已经订阅了某个主题,并且 mosquitto 服务器正在持续发布有关该主题的一些消息。 当新消息从 mosquitto 代理到达时,如何调用 on_message 方法?它是在主线程上运行,从而
我是 Tornado 的新手。我正在尝试用 Tornado 构建一个聊天服务器代理,我从网络客户端收到消息,通常它只需要将其发送回来,但是,我需要将这些消息发送给另一个服务器优先,问题来了,等待其他服
我最近开始用 Python 制作一个 Discord 机器人(用它测试 Python 的基础),并自己创建了一个带有多个命令的功能机器人。为了扩大其用途,我添加了一个级别/XP 系统,到目前为止该系统
当我的代码中有 on_message() 时,它会停止所有其他 @bot.command 命令的工作。我尝试await bot.process_commands(message),但这也不起作用。这是
我已经安装了 Mosquitto 并在终端中使用没有问题,还为 c++ 安装了 paho,mosquitto 和 paho 都运行良好。然后通过 pip 安装 paho for python。现在我正
请帮忙:)我刚开始在 python 中使用 MQTT。当我运行以下程序时: import paho.mqtt.client as mqtt def on_connect(client, userdat
我的 discord.py 脚本给了我一个意外错误。它基本上标记了我在 async def on_message(): 之外定义的所有变量。但在此之下用作“未定义”。 好吧,您可以通过在 on_mes
这让我发疯。我正在使用 Tornado 3.2 和 python 2.7。我已经在我的测试机 (Windows) 和我的 Linux 机器上都试过了。我只是在用(我认为是)一个简单的聊天室应用程序试水
我正在用 python 编写一个 discord-bot,它可以在 IntelliJ 甚至终端上正常运行。 当我尝试让它在 linux 服务器上运行但未连接到它时,问题就开始了 # Calle
最近我的 bot 越来越大,我花时间重写代码以使其与 Discord Py 的 cogs 系统一起工作 我已经正确调整了所有代码,但是我停止工作的所有 on_message 事件都没有抛出任何类型的错
我是一名优秀的程序员,十分优秀!