![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
PyQt - PyQt-Py2.7-x86-gpl-4.8.4-1.exe (SIP там вроде 4.12.1 вроде, но не могу сказать точно)
Собственно сабж , такой экспешен райситься после таких вещей: виджету подменяется метод contextMenuEvent на следующую функцию:
widget.contextMenuEvent=create_context_menu(cmWrapper([{'action_title':action_handler}])) Что делает этот код? В он заменяет ивен вызова контекстного меню на кастомное меню, которое создается путем задания конфига (хэш в __init__ у cmWrapper). Эксепшен прилетает после отработки хэндлера экшена. Код отрабатывается, приложение не крашиться. Просто хотелось бы понять, откуда эксепшен летит и почему. Для чего это нужно - что бы не писать методы создания менюшек для каждого виджета, а использовать так - как показано. все это добро прилетает вот отсюда (исходники последнего sip)
мне кажется тут 2 пути решения - 1. Проверить - жива ли функция которая вернулась лямбдой после отработки хэндлера. 2 Собрать свежий SIP и PyQt и попробовать. Больше у меня мыслей, пока, нет. |
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Ну так если ты знаешь, что есть эксцепшин, то можешь и размотать его стек и посмотреть откуда он был отправлен, а там уже потихоньку подебажить... Есть для Python такая хорошая штука как pdb, аналог С\С++ gdb. В нем и попробуй отладить...
|
|
|
Andrewshkovskii |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Нашел доку на эксепшен..
Цитата void sipBadCatcherResult(PyObject *method)¶ This raises a Python exception when the result of a Python reimplementation of a C++ method doesn’t have the expected type. It is normally called by handwritten code specified with the %VirtualCatcherCode directive. Parameter: method – the Python method and would normally be the supplied sipMethod. да в том то и дело, что он трейс мне не кидает, и вообще не понятно откуда вызывается, т.е. я его отловить руками не могу . Попробую Pdb завтра..может что покажет ![]() |
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Но тебе как я понимаю нужна будет тогда связка pdb c gdb, даже и не знаю можно их в связке попользовать...
![]() |
|
|
Andrewshkovskii |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
пррр..да уш, ситуация.
Кто-нибудь знает, чем плох не отловленный экспепшен? Утечек то вроде не будет, и программа не крашится , а то что это не эстетично и идеологически не верно(оставлять эксепшен просто так валяться) - это факт. |
|
|
ViGOur |
![]()
Сообщение
#6
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Решил проблемы путем возврата не лямбды а объекта функции. А так хотелось лямбду..ну что поделаешь
![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 1:40 |