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函數會導致問題,沒具體瞭解

[我的環境]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章