winpdb не работает с python 3.3

Я не могу заставить rpdb2 работать с python 3.3, в то время как это возможно по нескольким источникам.

$ rpdb2 -d myscript.py A password should be set to secure debugger client-server communication. Please type a password:x Password has been set. Traceback (most recent call last): File "/usr/local/bin/rpdb2", line 31, in <module> rpdb2.main() File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 14470, in main StartServer(_rpdb2_args, fchdir, _rpdb2_pwd, fAllowUnencrypted, fAllowRemote, secret) File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 14212, in StartServer g_module_main = -1 File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 14212, in StartServer g_module_main = -1 File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 7324, in trace_dispatch_init self.__set_signal_handler() File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 7286, in __set_signal_handler handler = signal.getsignal(value) File "/usr/local/lib/python3.3/dist-packages/rpdb2.py", line 13682, in __getsignal handler = g_signal_handlers.get(signum, g_signal_getsignal(signum)) ValueError: signal number out of range 

Версия rpdb2 – это RPDB 2.4.8 - Tychod . Я установил его, запустив pip-3.3 install winpdb .

Любые подсказки?

Сегодня у меня такая же проблема, вот что я сделал для ее работы. Тем не менее я не слишком уверен, правильно ли это сделать так.

Из:

 def __getsignal(signum): handler = g_signal_handlers.get(signum, g_signal_getsignal(signum)) return handler 

Для того, чтобы:

 def __getsignal(signum): try: # The problems come from the signum which was 0. g_signal_getsignal(signum) except ValueError: return None handler = g_signal_handlers.get(signum, g_signal_getsignal(signum)) return handler 

Эта функция должна быть на линии 13681 или что-то вроде этого.

Причиной проблемы является расширенный список атрибутов в signal модуле, который использовался rpdb2 для отображения всех сигналов. Новые версии python добавили такие атрибуты, как SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK

Поэтому фильтрация также должна быть расширена (патч изменяет только одну строку):

 --- rpdb2.py +++ rpdb2.py @@ -7278,11 +7278,11 @@ def __set_signal_handler(self): """ Set rpdb2 to wrap all signal handlers. """ for key, value in list(vars(signal).items()): - if not key.startswith('SIG') or key in ['SIGRTMIN', 'SIGRTMAX'] or key.startswith('SIG_'): + if not key.startswith('SIG') or key in ['SIG_IGN', 'SIG_DFL', 'SIGRTMIN', 'SIGRTMAX']: continue handler = signal.getsignal(value) if handler in [signal.SIG_IGN, signal.SIG_DFL]: continue 

К сожалению, не существует официальной разработки или вилки winpdb, поэтому к этому патчу будет храниться только SO.