c++调用python脚本报错returned a result with an error set

问题描述

在这里插入图片描述

在QT中调用python脚本时,使用了这三个函数:
PyImport_ImportModule
PyObject_GetAttrString
PyObject_CallObject

报错

Exception ignored in: <module 'threading' from 'D:\\Program Files (x86)\\Anaconda\\envs\\python32\\lib\\threading.py'>
Traceback (most recent call last):
  File "D:\Program Files (x86)\Anaconda\envs\python32\lib\threading.py", line 1289, in _shutdown
    assert tlock.locked()    
SystemError: <built-in method locked of _thread.lock object at 0x276EA800> returned a result with an error set
      finish the work and sent the resultReady signal

解决方法

  • 开辟新线程,将python脚本的调用放到新线程中执行
  • 检查python脚本中的文件路径是否正确
  • 检查python脚本中是否使用了if __name__=="__main__",因为c++调用的是函数,所以要把if __name__=="__main__改为def main():,即自己写一个主函数
    然后PyObject* pFun= PyObject_GetAttrString(pModule,"main");
  • 用VS的话,先生成exe可执行文件,然后进入Debug文件夹,通过点击运行exe文件,而不是通过VS调试模式F5,去调用py文件。(注意C++代码中导入py文件的路径不要搞错)

更新

最后发现开启一个新线程这种方法也挺多坑的,最后我采用的是开启一个cmd进程,然后再在cmd中调用Python脚本的方法。具体可以参考这篇博客.

感想

为这个bug花了一个下午的时间,网络上的相关资料也比较少。遇到bug时要先仔细审时自己的代码,然后再去网上找资料。

参考资料

调用Python时出现Exception ignored in: module ‘threading’ from ‘xxx:\Anaconda3\Lib\threading.py’

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值