为什么定义了一些Python标准库内置类和方法,而其他的有省略号存根?

为什么定义了一些Python标准库内置类和方法,而其他的有省略号存根?,python,Python,我在我的PyCharm IDE中浏览,查看了一些错误类型的定义。我知道这些都是影子内置的,所以我没想到它们的实际实现会被发现,但我所看到的引发了更多的问题: 类语法错误(\u StandardError): msg:str 行号:int 偏移量:可选[int] 文本:可选[str] 文件名:str 类SystemError(\u StandardError):。。。 类类型错误(\u StandardError):。。。 类值错误(\u StandardError):。。。 类FloatingP

我在我的PyCharm IDE中浏览,查看了一些错误类型的定义。我知道这些都是影子内置的,所以我没想到它们的实际实现会被发现,但我所看到的引发了更多的问题:

类语法错误(\u StandardError):
msg:str
行号:int
偏移量:可选[int]
文本:可选[str]
文件名:str
类SystemError(\u StandardError):。。。
类类型错误(\u StandardError):。。。
类值错误(\u StandardError):。。。
类FloatingPointError(算术错误):。。。
类溢出错误(算术错误):。。。
类ZeroDivisionError(算术错误):。。。
我知道Python对许多较低级别的内置对象使用基于CPython的定义,但我想知道一些事情:

1) 为什么有些类,比如
FloatingPointError
只有一个骨架
,而
SyntaxError
在其Python源代码中定义了实际的数据成员

2) 这里的
的目的是什么?例如,这只是PyCharm为可见性而生成的存根的一个工件,还是类定义不能被修改的原因

class FloatingPointError(ArithmeticError):
   pass
class OverflowError(ArithmeticError):
   pass
class ZeroDivisionError(ArithmeticError):
   pass
注意,我确信这实际上是
省略号
,而不是PyCharm折叠代码:

您确定
确实在代码中,还是只是Pycharm中的一个标记,表示它正在隐藏细节?你能点击左边的
或一个标记来展开隐藏的部分吗?@Robert是的,我确定,请看我更新的屏幕截图。真正的Python标准库根本没有任何用Python语法编写的
类SystemError
定义。Pycharm正在为您合成这段代码,作为用C编写的东西的占位符……至于为什么一些标准库异常是用Python编写的,而另一些是用C编写的,这归结为实现的必要性问题。如果C部件使用了一些东西来引导第一个Python组件,那么它必须用C本身编写。这样做是很麻烦的,所以人们通常不会在一种语言中使用它,而不仅仅是在必要的时候。除此之外,请看——我们的范围仅限于实际问题,也就是说,这些问题的答案将改变你编程的方式,教会你避免特定的错误,等等。