我是初学者。在这里学习。
一段代码正在抛出一个WindowsError。我捕捉到它并将其重命名为exception。
我通过dir(exception)、type(exception)、print(exception.__dict__)对对象进行了反思,试图找到一个引用来运行一些文档命令:例如,帮助(是引用)`。
我找不到定义WindowsError的地方。我试过help(os.WindowsError),但显然没有结果。
最终的目的是找出WindowsError的来源,但是对于这个问题,当我从Google那里得到答案时,我想学习如何通过命令找到这个答案。
具体地说:
我自省错了吗?有更好的方法吗?
发布于 2013-02-21 14:35:48
您可能想看看inspect模块。特别是inspect.getmodule函数。
要获得类的父类,只需查看一个类__bases__属性:
>>> IOError.__bases__
(<type 'exceptions.EnvironmentError'>,)也可以通过__mro__属性获得类的层次结构:
>>> IOError.__mro__
(<type 'exceptions.IOError'>, <type 'exceptions.EnvironmentError'>, <type 'exceptions.StandardError'>, <type 'exceptions.Exception'>, <type 'exceptions.BaseException'>, <type 'object'>)__mro__告诉您python在类层次结构中查找方法和属性的顺序。
注意,由于python允许多重继承,所以不能定义“超类”的概念。每个类可以有多个父类,层次结构可能会变成一个相当复杂的图,而试图考虑超类只会导致陷阱(例如,当子类重新定义签名时,对方法的调用失败等等)。
发布于 2013-02-21 14:35:13
问题1:定义类型的模块()
根据我的Python,它是在内置模块exceptions中定义的
>>> WindowsError
<type 'exceptions.WindowsError'>以编程方式,您可以通过读取类型的__module__属性来找到定义该类型的模块:
>>> WindowsError.__module__
'exceptions'
>>> sys.modules[WindowsError.__module__]
<module 'exceptions' (built-in)>问题2:查找类型的超类
类型列表超类的__bases__属性。
>>> WindowsError.__bases__
(<type 'exceptions.OSError'>,)问题3:给定对象的类型是什么?
你其实并没有问这个问题,但你的评论表明你应该这样做。若要查找对象的类型,请使用type()函数。
>>> i = 666
>>> type(i)
<type 'int'>
>>> type(i).__bases__
(<type 'object'>,)
>>> type(i).__module__
'__builtin__'因此,当您捕获一个异常时,您有一个对象,而不是一个类型,也就是说,您有一个类的实例。因此,要了解类型,必须首先使用type()获取类型。
https://stackoverflow.com/questions/15004796
复制相似问题