如何在 C 扩展中创建自定义 Python 异常类型?

发布于 2024-11-16 04:15:11 字数 263 浏览 3 评论 0原文

我正在用 C 编写一个 Python 模块。我需要报告内置 Python 异常无法描述的错误。因此,我希望抛出我自己类型的异常。问题是,Python 的策略是从 BaseException 类派生所有异常。我知道如何创建派生类型对象(分配给 tp_base memeber),但我不知道如何获取对 BaseException 类型对象的引用。 PyExc_BaseException 是对 PyObject 的引用,代表一个类,而不是类型对象。

如何从 C 代码中抛出自定义 Python 异常?

I'm writing a Python module in C. I need to report errors that can't be described by built-in Python exceptions. I therefore wish to throw exceptions of my own type. The problem is, that Python policy is to derive all exceptions from BaseException class. I know how to create a derived type object (assigning to tp_base memeber), but I don't know how to obtain a reference to BaseException type object. PyExc_BaseException is a reference to PyObject, representing a class, not a type object.

How do I throw custom Python exceptions from C code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星光不落少年眉 2024-11-23 04:15:11

在 C 代码中创建新异常类型的最简单方法是调用 <代码>PyErr_NewException

The easiest way to create a new exception type in C code is to call PyErr_NewException.

浸婚纱 2024-11-23 04:15:11

我设法使用 (PyTypeObject*)PyExc_BaseException 作为值来设置 tp_base,这导致我的自定义异常正确地从 BaseException 继承。

异常中的 CPython 源代码中有一些很好的提示。 c.

I managed to set tp_base by using (PyTypeObject*)PyExc_BaseException as the value, which results in my custom exception being properly inherited from BaseException.

There are some good hints in the CPython source code in exceptions.c.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文