如何在高速公路 python ApplicationSession.__init__ 中引发异常?
How to raise exception in autobahn python ApplicationSession.__init__?
我正在尝试将 autobahn-0.16.0 与 ApplicationRunner 一起使用,如 github 上的 this example 所示。
如果我在调用 join()
后引发异常,一切都会按预期进行。但是,如果在 __init__
方法中引发异常,我会得到 AttributeError: 'ApplicationRunner' object has no attribute 'log'
。我想知道是否有办法让这个工作。
下面的代码是重现问题的示例。
#!/usr/bin/python3
import txaio
import asyncio
from asyncio import coroutine
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
class SessionWithException(ApplicationSession):
def __init__(self, config):
ApplicationSession.__init__(self, config)
# raise Exception('Some error exception')
def onConnect(self):
print("Connecting...")
self.join(self.config.realm)
raise Exception('Good exception')
@coroutine
def onJoin(self, details):
print("Joining...")
self.disconnect()
def onDisconnect(self):
print("Disconnecting...")
asyncio.get_event_loop().stop()
def main():
txaio.start_logging(level='error')
runner = ApplicationRunner("wss://api.poloniex.com:443", "realm1")
runner.run(SessionWithException)
if __name__ == "__main__":
main()
当我在 __init__
中注释掉 raise
时,我得到这个错误:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/autobahn/wamp/websocket.py", line 60, in onOpen
self._session = self.factory._factory()
File "/usr/lib/python3.4/site-packages/autobahn/asyncio/wamp.py", line 125, in create
self.log.failure("App session could not be created! ")
AttributeError: 'ApplicationRunner' object has no attribute 'log'
我认为这是 Autobahn 本身的一个小错误。
该库应该尽早初始化所有跑步者的属性。
请在 bug tracker
上提交问题
我正在尝试将 autobahn-0.16.0 与 ApplicationRunner 一起使用,如 github 上的 this example 所示。
如果我在调用 join()
后引发异常,一切都会按预期进行。但是,如果在 __init__
方法中引发异常,我会得到 AttributeError: 'ApplicationRunner' object has no attribute 'log'
。我想知道是否有办法让这个工作。
下面的代码是重现问题的示例。
#!/usr/bin/python3
import txaio
import asyncio
from asyncio import coroutine
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
class SessionWithException(ApplicationSession):
def __init__(self, config):
ApplicationSession.__init__(self, config)
# raise Exception('Some error exception')
def onConnect(self):
print("Connecting...")
self.join(self.config.realm)
raise Exception('Good exception')
@coroutine
def onJoin(self, details):
print("Joining...")
self.disconnect()
def onDisconnect(self):
print("Disconnecting...")
asyncio.get_event_loop().stop()
def main():
txaio.start_logging(level='error')
runner = ApplicationRunner("wss://api.poloniex.com:443", "realm1")
runner.run(SessionWithException)
if __name__ == "__main__":
main()
当我在 __init__
中注释掉 raise
时,我得到这个错误:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/autobahn/wamp/websocket.py", line 60, in onOpen
self._session = self.factory._factory()
File "/usr/lib/python3.4/site-packages/autobahn/asyncio/wamp.py", line 125, in create
self.log.failure("App session could not be created! ")
AttributeError: 'ApplicationRunner' object has no attribute 'log'
我认为这是 Autobahn 本身的一个小错误。 该库应该尽早初始化所有跑步者的属性。 请在 bug tracker
上提交问题