如何以Pythonic方式检查对象x是否为模块?
判断对象是否为模块的Pythonic方式
我们知道用type(x) is 类型的方式可以判断内置类型(如str、list、int等)以及正确导入的类,但这种方法没法直接用来判断模块:
type(x) is module # NameError: name 'module' is not defined.
常见的变通方案有两种:
str(type(x)) == "<class 'module'>" type(x) is type(os) # 或者用任意已导入的模块对象
更Pythonic的实现方式
有两种更规范、符合Python风格的方法:
- 使用
inspect模块的ismodule()函数
这是专门用于判断对象是否为模块的直观方法:
import inspect import os inspect.ismodule(os) # 返回 True inspect.ismodule("test") # 返回 False
- 从
types模块导入ModuleType进行判断types模块提供了各种内置类型的官方引用,其中包含模块类型:
import types import os type(os) is types.ModuleType # 返回 True isinstance(os, types.ModuleType) # 同样有效,且更适配可能存在的子类场景
注:isinstance()相比type() is更灵活,若遇到自定义模块子类(极为罕见),isinstance()仍能正确识别,而type() is则无法匹配。
内容的提问来源于stack exchange,提问作者Kevin Kostlan
相关产品推荐
相关产品推荐

