首页 / PYTHON / 掩盖Python中的异常?
掩盖Python中的异常?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了掩盖Python中的异常?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1606字,纯文字阅读大概需要3分钟。
内容图文
通常使用with语句打开文件,以便不会泄漏文件句柄:
with open("myfile") as f:
…
但是如果异常发生在公开调用的某个地方呢? open函数很可能不是Python解释器中的原子指令,所以完全有可能在打开调用完成之前的某个时刻,但在系统调用完成之后,会抛出一个异步异常,例如KeyboardInterrupt.
处理此问题的常规方法(例如,在POSIX信号中)使用屏蔽机制:在屏蔽时,异常的传递暂停,直到它们稍后被屏蔽.这允许诸如open之类的操作以原子方式实现. Python中是否存在这样的原语?
[*]有人可能会说这对于KeyboardInterrupt来说无关紧要,因为无论如何程序即将死亡,但并非所有程序都是如此.可以想象,程序可能会选择在顶层捕获KeyboardInterrupt并继续执行,在这种情况下,泄漏的文件句柄会随着时间的推移而累加.
解决方法:
我认为它不可能掩盖异常,你可以屏蔽信号但不能屏蔽异常.在您的情况下,KeyboardInterrupt是引发signal.SIGINT时引发的异常(即Ctrl C).
不可能掩盖异常,因为它没有意义,对吧?假设您正在打开(‘file’,’r’),但文件不存在,这会导致open函数抛出IOError Exception,我们不应该屏蔽这些异常.掩盖它是没有意义的,因为open在以上情况下永远无法完成.
exceptions – anomalous or exceptional conditions requiring special processing
对于KeyboardInterrupt异常,它的不同之处在于,正如我所说,它实际上是一个导致引发KeyboardInterrupt异常的信号.
您只能使用函数signal.pthread_sigmask [Reference]从Python 3.3开始屏蔽Unix中的信号
为此,您必须将上下文表达式移动到另一个块,以便我们可以像屏蔽信号,运行上下文表达式以获取上下文管理器然后取消屏蔽信号,示例代码看起来像(请注意)我没有亲自测试过此代码) –
import signal
signal.pthread_sigmask(signal.SIG_BLOCK,[signal.SIGINT])
with <context expression> as variable: # in your case ,open('filename','r')
signal.pthread_sigmask(signal.SIG_UNBLOCK,[signal.SIGINT])
...
内容总结
以上是互联网集市为您收集整理的掩盖Python中的异常?全部内容,希望文章能够帮你解决掩盖Python中的异常?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。