使用 C 或 C++ 扩展 Python,PyArg_ParseTuple() 设置的异常

回到前面的例子,参考上篇https://wheart.blog.csdn.net/article/details/136787834,你应该明白下面的代码:

if (!PyArg_ParseTuple(args, "s", &command))
    return NULL;

如果在参数列表中检测到错误,它将返回 NULL (该值是返回对象指针的函数的错误提示),这取决于 PyArg_ParseTuple() 设置的异常。 在其他情况下参数的字符串值会被拷贝到局部变量 command。 这是一个指针赋值并且你不应该修改它所指向的字符串 (因此在标准 C 中,变量 command 应当被正确地声明为 const char *command)。

下一个语句使用UNIX系统函数 system() ,传递给他的参数是刚才从 PyArg_ParseTuple() 取出的:

sts = system(command);

我们的 spam.system() 函数必须以 Python 对象的形式返回 sts 的值。 这是通过使用函数 PyLong_FromLong() 完成的。

return PyLong_FromLong(sts);

在这种情况下,会返回一个整数对象,(这个对象会在Python堆里面管理)。

如果你有一个不返回有用参数的 C 函数(即返回 void 的函数),则对应的 Python 函数必须返回 None。 你必须使用这种写法(它是通过 Py_RETURN_NONE 宏来实现的)

Py_INCREF(Py_None);
return Py_None;

Py_None 是特殊 Python 对象 None 所对应的 C 名称。 它是一个真正的 Python 对象而不是 NULL 指针,如我们所见,后者在大多数上下文中都意味着“错误”。

相关推荐

  1. 使用 C C++ 扩展 Python

    2024-03-20 13:52:01       42 阅读
  2. c++扩展C++对C扩展

    2024-03-20 13:52:01       32 阅读
  3. C# LING查询语法学习,扩展方法使用

    2024-03-20 13:52:01       41 阅读
  4. C#中扩展方法

    2024-03-20 13:52:01       33 阅读
  5. C++_对C数据类型扩展

    2024-03-20 13:52:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 13:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 13:52:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 13:52:01       82 阅读
  4. Python语言-面向对象

    2024-03-20 13:52:01       91 阅读

热门阅读

  1. 北京机器人展2024世界机器人大会

    2024-03-20 13:52:01       36 阅读
  2. Redux 的工作流程

    2024-03-20 13:52:01       42 阅读
  3. LeetCode 热题100 贪心算法专题解析

    2024-03-20 13:52:01       39 阅读
  4. Spring AOP和AspectJ AOP区别

    2024-03-20 13:52:01       35 阅读
  5. Log4j

    Log4j

    2024-03-20 13:52:01      35 阅读
  6. 面试算法-63-全排列

    2024-03-20 13:52:01       33 阅读
  7. React.js快速入门教程

    2024-03-20 13:52:01       36 阅读
  8. Twinkle Tray:屏幕亮度管理的得力助手

    2024-03-20 13:52:01       123 阅读
  9. ffmpeg的ffprobe.exe查询修改视频信息

    2024-03-20 13:52:01       46 阅读