2015-01-17 2 views
0

Я пытаюсь отлаживать удаленные вызовы процедур для компонентов Python на основе WAMP (Web Application Messaging Protocol). Например:Запуск WAMP worker Trace Back Error

Передняя часть (браузер)

session.call('math.add2', [2, 'two']); 

Назад конец (питон)

@wamp.register("math.add2") 
def add2(self, x, y): 
    return x + y 

Это дает немного представление о ошибке.

Для простого примера, как это, это вообще не имеет значения, но для больших приложений с большим количеством файлов и модулей я не совсем уверен в том, что лучше всего указать ошибки, чтобы они выходили полная ошибка с именем файла, номером строки и описанием.

В качестве решения, я слегка модифицировали wamp.py (добавляется строка traceback.print_exc()), как показано ниже для вывода ошибки на лог консоли:

# autobahn/asyncio/wamp.py 
... 
import traceback 
... 

class FutureMixin: 
    ... 
    @staticmethod 
    def _as_future(fun, *args, **kwargs): 
    try: 
     res = fun(*args, **kwargs) 
    except Exception as e: 
     traceback.print_exc() # Added this line 
     ... 

Это стандартный способ справиться с этим?

ответ

2

AutobahnPython позволяет включить отправку tracebacks в сообщениях об ошибках WAMP:

class MyComponent(ApplicationSession): 
    def __init__(self, config = None): 
     ApplicationSession.__init__(self, config) 
     self.traceback_app = True 
+0

Спасибо, но, к сожалению, не похоже, что это будет работать. Когда я включаю вышеуказанный код, он не вызывает функцию onJoin, поэтому не может выполнять процедуры. – Eddie

+0

Быстрое исправление, я просто явно передал сам объект в качестве первого аргумента, и он работает. Я имею в виду вместо 'ApplicationSession .__ init __ (config)' Я вызывал 'ApplicationSession .__ init __ (self, config)'. Я рад, что теперь он работает как магия. – Eddie

+0

О, хорошо поймать. Да, нужно вызвать 'self' при вызове конструктора базового класса. Я исправил ответ. Сожалею. – oberstet