Winpdb no funciona con Python 3.3

No puedo hacer que rpdb2 se ejecute con python 3.3, mientras que eso debería ser posible de acuerdo con varias fonts.

$ 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  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 

La versión de rpdb2 es RPDB 2.4.8 - Tychod . Lo instalé ejecutando pip-3.3 install winpdb .

¿Alguna pista?

Tengo el mismo problema hoy aquí es lo que he hecho para que funcione. Todavía no estoy muy seguro de si es correcto hacerlo de esta manera.

Desde:

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

A:

 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 

Esta función estará en la línea 13681 o algo así.

El motivo de un problema es la lista extendida de atributos en un módulo de signal que fue utilizado por rpdb2 para enumerar todas las señales. Las nuevas versiones de python agregaron atributos como SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK

Por lo tanto, el filtrado también debería extenderse (el parche cambia solo una línea):

 --- 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 

Desafortunadamente, no hay un desarrollo oficial actual o una bifurcación de winpdb, por lo que a esta altura este parche se almacenará en SO.