2

如何在 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'
4

3 回答 3

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__']
>>> 
于 2012-07-09T21:31:05.727 回答
5

inspect.ismodule 几乎是你能得到的最简单的。

import inspect
inspect.ismodule(inspect)
于 2012-07-09T21:37:31.907 回答
-2

if type(obj) == type(__builtin__)应该有帮助

于 2012-07-09T21:29:42.660 回答