In Cython, the usual raise keyword emits C code that contains a reference to the line and name of the Cython source file, allowing a useful error message to be generated.
However, I haven’t seen anything for warnings. Simply calling warnings.warn leaves the interpreter confused as to where the warning came from. I could use PyErr_WarnExplicit if there was something similar to the __LINE__ macro for pyx files.
Is there either a standard way to issue warnings or a standard way to refer to the pyx line number in Cython?
Update
This question has been open for months, so I can only assume that Cython does not presently have a good way to issue warnings. I’ll leave it open here in case someone does find a way/submit a patch to make this work right.
Here’s something that works OK
warn.pyx:
setup.py:
The trick is to make cython emit
#linedirectives when generating the C code and tricking it into thinking the__FILE__and__LINE__are real variables that it can use. Then the warn_explicit function from warnings can be used to override the default method of determining the source file and line number.