shiniei
shiniei
发布于 2026-03-28 / 1 阅读
0
0

捕获蛛丝马迹

捕获蛛丝马迹

try-except错误返回的是什么?

是实例还是类还是其他?
在回答这个问题之前,还是有挺多前置知识要知道的

对象

首先要引出一个事实,可能很多人学python很久都没有发现,其实所有类都是type类的实例,而object类是所有类的父级.
其次所有的类用type类去查看,会发现它们都和type类有关系,它们的结果都为<class 'type'>.
万物皆为对象,什么意思呢?其实我们学到最基础的所有数据类型都是某个类的实例,只不过它换种形式的写法替代了原来的写法,很多人没有意识到这一点,只知道老师一直说个口头禅"万物皆为对象",于是自己也跟着念,也没有后续啥事情.
既然所有类都type类的实例,那用type查看的值不是<class 'type'>,那可以直接推断出来它是某个类的实例了.

>>> type('hello')
<class 'str'>
>>> type([])
<class 'list'>
>>> type(str)
<class 'type'>
>>> type(list)
<class 'type'>
>>> type(type)
<class 'type'>
>>> type(str('hello'))
<class 'str'>

执行完下面的代码很清晰的看到,e其实是ZeroDivisionError的实例

try:
    print(1/0)
except ZeroDivisionError as e:
    print(type(ZeroDivisionError),type(e))

对了,我为什么说所有呢?!
虽然type类是元类,并不是它自身创造了自身,而是借助了外部力量c语言之类的,但是我们可以把它看作广义上的一种,那么它也就实现了自举,也即自己缔造了自己,非常像数学中不动点的感觉.


评论