gpt4 book ai didi

python - Python 中的外部异常可以在代码块的持续时间内延迟吗?

转载 作者:行者123 更新时间:2023-12-01 05:11:08 25 4
gpt4 key购买 nike

是否有任何方法可以将来自外部源的异常推迟到特定代码块的持续时间内?例如:

some_statement_one
some_statement_two
# Begin suppression of KeyboardInterrupt
with KeyboardInterrupt suppressing context:
important_statement_one
important_statement_two
important_statement_three

some_statement_three

我希望能够做的是延迟接收KeyboardInterrupt(或我指定的任何错误),直到重要 block 结束之后。也就是说,如果在执行 important_statement_one 期间用户发送键盘中断,代码将正常继续执行,直到执行完 important_statement_third 为止。然后,KeyboardInterrupt 将被接收,就像当时已发送一样。

我关心的只是正在执行的代码外部生成的异常,例如键盘中断、系统退出等。是否有一种有意义的方法来区分正在执行的代码引发的异常和异常由于外部原因引发?除非有外部原因,否则我可能无法做我想做的事情。

一些附加信息:我正在使用 Is there any way to kill a Thread in Python? 中建议的技术将异常发送到线程。引发这样的异常会产生影响吗?

我实际上不能为此使用 try/except block - 我是线程之间的一些信息,因此如果在传递信息的行上发送异常,则信息将丢失。

最佳答案

我认为您想覆盖 sigint 信号的默认处理程序。

这是一个简单的方法。

some_statement_one
some_statement_two

# Save sigint handler
original_sigint_handler = signal.getsignal(signal.SIGINT)

# Set sigint handler to a function that does nothing with it
signal.signal(signal.SIGINT, lambda: None)

important_statement_one
important_statement_two
important_statement_three

# Restore handler
signal.signal(signal.SIGINT, original_sigint_handler)

some_statement_three

您可能希望将其包装在一个类中,并使用输入和退出函数来获得更清晰的代码。您的代码看起来像您想要的那样(使用“with”)

阅读:Explaining Python's '__enter__' and '__exit__'

关于python - Python 中的外部异常可以在代码块的持续时间内延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24212112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com