- 76
- 0
代码如下,第二次进入的时候,到PyImport_ImportModule这一行就崩溃,还捕获不到异常
Py_Initialize();
char fileName[] = "rabbitProducer.producer";
try
{
PyObject * moduleObj = PyImport_ImportModule(fileName);
if (moduleObj)
{
char functionName[] = "produce";
PyObject * functionObj = PyObject_GetAttrString(moduleObj, functionName);
if (functionObj)
{
if (PyCallable_Check(functionObj))
{
PyObject * bytesObject = Py_BuildValue("y#", message,len);
PyObject * argsObject = PyTuple_New(1);
PyTuple_SetItem(argsObject, 0, bytesObject);
if (argsObject)
{
PyObject * resultObject = PyObject_CallObject(functionObj, argsObject);
if (resultObject)
{
Py_DECREF(resultObject);
}
else if (PyErr_Occurred())
{
PyErr_Print();
}
Py_DECREF(bytesObject);
Py_DECREF(argsObject);
}
}
Py_DECREF(functionObj);
}
//else PyErr_Clear();
Py_DECREF(moduleObj);
}
Py_Finalize();
}
catch (PyObject* ex)
{
PyException_GetTraceback(ex);
} - 共 0 条
- 全部回答
-
一叶青天 普通会员 1楼
在Python中,
PyImport_ImportModule函数可以导入同一个module两次,这取决于你使用的是哪种Python解释器。以下是在大多数Python解释器中,PyImport_ImportModule函数的行为:- Python 3.6及以上版本:
在Python 3.6及以上版本中,
PyImport_ImportModule函数在一次导入过程中只允许一次__import__操作。__import__函数是在当前模块中搜索该模块,如果没有找到,就从模块所在的包中导入。如果你在当前模块中导入了模块,__import__函数会返回该模块,然后你可以再次使用__import__函数从模块所在的包中导入,这将导致两次导入同一个模块。当然,你可以使用
PyImport_Import()函数来导入多个模块,但__import__函数只在一次导入中执行,所以即使你对多个模块进行了__import__操作,它们的引用仍会在每次导入后被保留。- Python 2.7及以下版本:
在Python 2.7及以下版本中,
PyImport_ImportModule函数在一次导入过程中允许一次__import__操作。__import__函数是在当前模块中搜索该模块,如果没有找到,就从模块所在的包中导入。但是,如果在当前模块中导入了模块,那么在第一次__import__操作后,该模块的引用已经被删除,所以你在第二次__import__操作时将不会看到它。如果你想在Python 2.7及以下版本中导入多个模块,你可能需要使用
importlib模块,这是一个独立的Python库,用于导入模块并提供模块的元数据,如包名、类名等。使用importlib模块时,你可以定义一个模块文件的结构,每个模块文件包含一个模块名和一个包含模块对象的模块元数据,这样就可以在同一个模块文件中导入多个模块。以下是一个简单的示例:
```python from importlib import import_module
module1 = import_module('module1') module2 = import_module('module2')
# 访问模块1的属性和方法 print(module1.name) print(module1.description)
# 访问模块2的属性和方法 print(module2.name) print(module2.description) ```
这将输出以下结果:
module1 module2注意,虽然在Python 2.7及以下版本中,
__import__函数允许在一次导入中执行多次__import__操作,但在Python 3.6及以上版本中,这个行为已经被禁用,因为Python 3.6及以上版本已不再支持在模块中直接导入模块。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

