From 72f4057d81798b09f08ba67e3f24da049dd64c96 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Fri, 11 Jun 2021 13:28:20 -0400 Subject: [PATCH] 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 Stack frame: ', line 12, code > [1]: https://docs.python.org/3/library/signal.html#signal.signal --- stdlib/signal.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/signal.pyi b/stdlib/signal.pyi index aa0bbf2bf..d54b22d57 100644 --- a/stdlib/signal.pyi +++ b/stdlib/signal.pyi @@ -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":