Python:如何检查对象是否是模块?

时间:2012-07-09 21:27:33

标签: python object module

如何在Python中检查给定对象是否为模块?

以下是我的尝试:

>>> import sys
>>> sys.modules["sys"].__class__
<class 'module'>
>>> isinstance(sys.modules["sys"], module)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'module' is not defined
>>> sys.modules["sys"].__class__.__module__
'builtins'
>>> import builtins
>>> builtins.module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'module'

3 个答案:

答案 0 :(得分:7)

>>> import sys, types
>>> isinstance(sys, types.ModuleType)
True

types模块还提供了许多其他类型:

>>> dir(types)
['BooleanType', 'BufferType', 'BuiltinFunctionType', 'BuiltinMethodType', 'ClassType', 'CodeType', 'ComplexType', 'DictProxyType', 'DictType', 'DictionaryType', 'EllipsisType', 'FileType', 'FloatType', 'FrameType', 'FunctionType', 'GeneratorType', 'GetSetDescriptorType', 'InstanceType', 'IntType', 'LambdaType', 'ListType', 'LongType', 'MemberDescriptorType', 'MethodType', 'ModuleType', 'NoneType', 'NotImplementedType', 'ObjectType', 'SliceType', 'StringType', 'StringTypes', 'TracebackType', 'TupleType', 'TypeType', 'UnboundMethodType', 'UnicodeType', 'XRangeType', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
>>> 

答案 1 :(得分:5)

inspect.ismodule几乎是最简单的。

import inspect
inspect.ismodule(inspect)

答案 2 :(得分:-2)

if type(obj) == type(__builtin__)应该提供帮助