gpt4 book ai didi

python - 发出 Cythonic 警告?

转载 作者:太空狗 更新时间:2023-10-29 17:20:46 25 4
gpt4 key购买 nike

在 Cython 中,常用的 raise 关键字发出 C 代码,其中包含对 Cython 源文件的行和名称的引用,从而生成有用的错误消息。

但是,我还没有看到任何警告。简单地调用 warnings.warn 会让解释器对警告的来源感到困惑。如果 pyx 文件有类似于 __LINE__ 宏的内容,我可以使用 PyErr_WarnExplicit

在 Cython 中是否有发出警告的标准方法或引用 pyx 行号的标准方法?

更新

这个问题已经开放了几个月,所以我只能假设 Cython 目前没有发出警告的好方法。我会在这里打开它,以防有人找到方法/提交补丁来使这项工作正常进行。

最佳答案

这是可以正常工作的东西

警告.pyx:

import warnings

cdef extern from "Python.h":
char* __FILE__

cdef extern from "Python.h":
int __LINE__

def dowarn():
warnings.warn_explicit("a warning", category=UserWarning, filename=__FILE__, lineno=__LINE__)

设置.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Compiler.Main import default_options
default_options['emit_linenums'] = True
from Cython.Distutils import build_ext


ext_modules = [ Extension("warn", ["warn.pyx"]) ]

setup(
name = "warn",
cmdclass = {"build_ext": build_ext},
ext_modules = ext_modules
)

诀窍是在生成 C 代码时让 cython 发出 #line 指令并欺骗它认为 __FILE____LINE__ 是真实的它可以使用的变量。然后warnings中的warn_explicit函数可以用来覆盖默认的确定源文件和行号的方法。

关于python - 发出 Cythonic 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com