Signal handler callables take int, not Signals (#5622)

The documentation for [`signal.signal`][1] points out that the current
annotation for signal handlers might be wrong (emphasis my own):

> The handler is called with two arguments: the signal **number** and the
> current stack frame (**`None` or** a frame object; for a description of frame
> objects, see the description in the type hierarchy or see the attribute
> descriptions in the `inspect` module).

And when we use them, we can see that the signal number is passed as an `int`,
not a `signal.Signals` member:

import signal

    def handler(signal_number, frame):
        print("In signal handler!")
        print("Signal number:", signal_number, type(signal_number))
        print("Stack frame:  ", frame, type(frame))

    # Set signal handler:
    signal.signal(signal.SIGHUP, handler)

    # Use it:
    signal.raise_signal(signal.SIGHUP)

Which prints:

    In signal handler!
    Signal number: 1 <class 'int'>
    Stack frame:   <frame at 0x7f804402abe0, file '<stdin>', line 12, code <module>> <class 'frame'>

[1]: https://docs.python.org/3/library/signal.html#signal.signal
This commit is contained in:
Rebecca Turner
2021-06-11 13:28:20 -04:00
committed by GitHub
parent 967d0b2167
commit 72f4057d81

View File

@@ -80,7 +80,7 @@ if sys.platform != "win32":
SIG_SETMASK = Sigmasks.SIG_SETMASK
_SIGNUM = Union[int, Signals]
_HANDLER = Union[Callable[[Signals, FrameType], Any], int, Handlers, None]
_HANDLER = Union[Callable[[int, Optional[FrameType]], Any], int, Handlers, None]
SIGABRT: Signals
if sys.platform != "win32":