реактор.registerWxApp (приложение) с ошибкой атрибута У объекта «SelectReactor» нет атрибута «registerWxApp» - PullRequest
0 голосов
/ 09 мая 2018

Я сейчас получаю сообщение об ошибке:

reactor.registerWxApp(app)
AttributeError: 'SelectReactor' object has no attribute 'registerWxApp'

Я не могу добавить приложение в реактор, так как registerWxApp не распознается? Также, если я не перехватываю wxreactor, возникает ошибка, что wxreactor уже установлен.

if __name__ == '__main__':
    import wx
    from twisted.internet import wxreactor
    try:
        wxreactor.install()
    except:
        print('already installed')
    # import t.i.reactor only after installing wxreactor:
    from twisted.internet import reactor


STREAM_URL = url

print(STREAM_URL)

factory = WebSocketClientFactory(STREAM_URL)
factory.protocol = MyClientProtocol

print('hello')

print('hi')


app = wx.App(False)
app._factory = factory
app._frame= testapi(None)
app._frame.Show()
reactor.registerWxApp(app)
print(reactor)
reactor.run()

app.MainLoop()

1 Ответ

0 голосов
/ 09 мая 2018

Вы сделали здесь предположение:

from twisted.internet import wxreactor
try:
    wxreactor.install()
except:
    print('already installed')

Предполагается, что только причина wxreactor.install() может вызвать исключение, если wxreactor уже установлен. Я ожидаю, что предположение неверно.

Старайтесь избегать написания except: в своих программах на Python, если только вы не планируете включать в блок голый raise, чтобы повторно вызывать любое исключение, которое вы обрабатываете (и даже в этом случае вместо этого используйте finally ).

Когда вы ловите все исключения, вы рискуете поймать исключения, которые ваш код не может на самом деле обработать правильно. В этом случае, возможно, возникает другая проблема с установкой wxreactor. Если это так, то вы, вероятно, получаете реактор по умолчанию, когда код продолжает импортировать twisted.internet.reactor после этой попытки.

Исключение, о котором вы сообщили:

AttributeError: 'SelectReactor' object has no attribute 'registerWxApp'

означает, что у вас не установлен wxreactor. У вас установлено SelectReactor. Вы не можете зарегистрировать приложение wx на выбранном реакторе.

Вам необходимо диагностировать причину сбоя wxreactor.install(), и вы не можете сделать это, подавляя и игнорируя все исключения из этого вызова.

...