首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WindowsError是在哪里定义的?

WindowsError是在哪里定义的?
EN

Stack Overflow用户
提问于 2013-02-21 14:30:31
回答 2查看 2K关注 0票数 3

我是初学者。在这里学习。

一段代码正在抛出一个WindowsError。我捕捉到它并将其重命名为exception

我通过dir(exception)type(exception)print(exception.__dict__)对对象进行了反思,试图找到一个引用来运行一些文档命令:例如,帮助(是引用)`。

我找不到定义WindowsError的地方。我试过help(os.WindowsError),但显然没有结果。

最终的目的是找出WindowsError的来源,但是对于这个问题,当我从Google那里得到答案时,我想学习如何通过命令找到这个答案。

具体地说:

  • 获取定义类型的模块
  • 获得异常类的超级类型(甚至.有课吗?!)

我自省错了吗?有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-21 14:35:48

您可能想看看inspect模块。特别是inspect.getmodule函数。

要获得类的父类,只需查看一个类__bases__属性:

代码语言:javascript
复制
>>> IOError.__bases__
(<type 'exceptions.EnvironmentError'>,)

也可以通过__mro__属性获得类的层次结构:

代码语言:javascript
复制
>>> IOError.__mro__
(<type 'exceptions.IOError'>, <type 'exceptions.EnvironmentError'>, <type 'exceptions.StandardError'>, <type 'exceptions.Exception'>, <type 'exceptions.BaseException'>, <type 'object'>)

__mro__告诉您python在类层次结构中查找方法和属性的顺序。

注意,由于python允许多重继承,所以不能定义“超类”的概念。每个类可以有多个父类,层次结构可能会变成一个相当复杂的图,而试图考虑超类只会导致陷阱(例如,当子类重新定义签名时,对方法的调用失败等等)。

票数 2
EN

Stack Overflow用户

发布于 2013-02-21 14:35:13

问题1:定义类型的模块()

根据我的Python,它是在内置模块exceptions中定义的

代码语言:javascript
复制
>>> WindowsError
<type 'exceptions.WindowsError'>

以编程方式,您可以通过读取类型的__module__属性来找到定义该类型的模块:

代码语言:javascript
复制
>>> WindowsError.__module__
'exceptions'
>>> sys.modules[WindowsError.__module__]
<module 'exceptions' (built-in)>

问题2:查找类型的超类

类型列表超类的__bases__属性。

代码语言:javascript
复制
>>> WindowsError.__bases__
(<type 'exceptions.OSError'>,)

问题3:给定对象的类型是什么?

你其实并没有问这个问题,但你的评论表明你应该这样做。若要查找对象的类型,请使用type()函数。

代码语言:javascript
复制
>>> i = 666
>>> type(i)
<type 'int'>
>>> type(i).__bases__
(<type 'object'>,)
>>> type(i).__module__
'__builtin__'

因此,当您捕获一个异常时,您有一个对象,而不是一个类型,也就是说,您有一个类的实例。因此,要了解类型,必须首先使用type()获取类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15004796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档