python异常是不是会生成软件陷阱/中断?

Posted

技术标签:

【中文标题】python异常是不是会生成软件陷阱/中断?【英文标题】:Does a python exception generate a software trap/interrupt?python异常是否会生成软件陷阱/中断? 【发布时间】:2021-11-19 05:05:21 【问题描述】:

假设我在中断器中抛出了一些简单的错误,例如:

>>> x = 5/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

这会在内核级别产生陷阱还是导致上下文切换? 还是只是在 Python 运行时内部处理而没有真正影响性能?

如果我将代码包装在 Python 异常块中,这种情况是否会发生变化?

>>> try:
...   x = 5/0
... except :
...   pass
...
>>>

【问题讨论】:

@sj95126 您说的是标准实现“CPython”,还是适用于所有实现? 没关系 - 我觉得我的解释不够透彻,我已经删除了我的答案。 【参考方案1】:

简而言之:不,异常不算作软件中断,也不算作软件中断/陷阱。

中断主要是针对操作系统的东西,而python中的错误实际上只是来自sys.stderr,你也可以编写它们:

import sys
sys.stderr.write('I am an error!')

输出:

I am an error!

错误来自sys.stderr,它们只是颜色不同,表现为错误。错误也只能由解释器在执行时检测到。

这意味着错误不是你想象的那样,它们实际上只是来自sys.stderr

【讨论】:

以上是关于python异常是不是会生成软件陷阱/中断?的主要内容,如果未能解决你的问题,请参考以下文章

软件生成的中断和软件生成的异常有啥区别?

中断异常和系统调用

中断异常trap 的区别

x86 - 操作系统:中断陷阱异常故障终止

中断描述符表描述符:任务门,中断门,陷阱门(调用门)

异常处理的返回