PyImport_ImportModule和PyObject_GetAttrString返回NULL的坑

PyImport_ImportModule返回NULL的坑

先上函数的官方参考
先说结论 (我的环境Python37_64):

  • PyImport_ImportModule返回NULL从路径问题查找
  • 官方文档似乎有问题,该函数似乎只能用相对路径
  • 最好自己运行PyRun_SimpleString(“print(os.listdir())”);测试一遍当前目录确保目录下有你想要导入的模块,如果要导入官方模块要跑到安装目录下
  • python自身模块的优先级高于你自己定义的模块,最好不要起test.py这样的名字
  • 虽然win文件名不区分大小写,但是实际上如果名字大小写不一致win中也会返回NULL
  • PyImport_ImportModule(“TE.py”)是不对的,不能加后缀。

程序员最讨厌的两件事:写文档,没有文档
                           程序员最讨厌的两件事:写文档,没有文档

PyImport_ImportModule返回NULL基本是因为路径问题导致没有找到文件导致的。我之前在程序里试了好久,D:\te和D:\te.py都不成。
自己输te或者te.py也不成,然后放了一段时间,后来想到也许是我搞错了python模块的当前目录于是

	PyRun_SimpleString("import os");
	PyRun_SimpleString("print(os.listdir())");

果然测出目录不是我想象的那样。修改路径,果然成了。

PyObject_GetAttrString

这个原因可能有

  • 你写的python函数语法有问题
  • python自身模块的优先级高于你自己定义的模块,比如你的函数和文件名都是test,解释器调用了python自己的test模块。
  • 听说有时候print函数会导致问题,没具体了解

[我的环境]

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值