使用pkgutil列举NXOpen包所有模块/子包报错如何解决?
问题原因
- 第一个报错
ValueError("path must be None or list of path to look for"):
标准Python包的__path__属性为存储包搜索路径的列表,但NXOpen是西门子定制的Python绑定包,其__path__被重写为单个字符串,不符合pkgutil.iter_modules()要求的入参规范,因此触发报错。 - 第二个报错
TypeError: 'WindowsPath' object is not iterable:pkgutil.iter_modules()的第一个入参要求为可迭代的路径集合,你直接传入单个WindowsPath对象,该对象本身不是可迭代的路径序列,因此触发类型错误。
解决方案
仅需要把目标路径包装为单元素的路径列表即可,以下是可运行的参考代码:
import NXOpen import pkgutil mod_list = [] # 将NXOpen的__path__字符串包装为单元素列表传入 for importer, modname, ispkg in pkgutil.iter_modules([NXOpen.__path__]): mod_list.append(modname) the_string = "\n".join(mod_list) lw = NXOpen.Session.GetSession().ListingWindow lw.Open() lw.WriteFullline(the_string) lw.Close()
如果更倾向用__file__推导路径,可以用以下版本:
import NXOpen import pkgutil import os mod_list = [] nxopen_dir = os.path.dirname(NXOpen.__file__) # 将目录路径字符串包装为单元素列表传入 for importer, modname, ispkg in pkgutil.iter_modules([nxopen_dir]): mod_list.append(modname) the_string = "\n".join(mod_list) lw = NXOpen.Session.GetSession().ListingWindow lw.Open() lw.WriteFullline(the_string) lw.Close()
内容的提问来源于stack exchange,提问作者Foad S. Farimani
相关产品推荐
相关产品推荐

