10000 Improve error messages of `curses` by indicating failed C function · Issue #125843 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

Improve error messages of curses by indicating failed C function #125843

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
picnixz opened this issue Oct 22, 2024 · 7 comments
Closed

Improve error messages of curses by indicating failed C function #125843

picnixz opened this issue Oct 22, 2024 · 7 comments
Assignees
Labels
extension-modules C modules in the Modules dir type-feature A feature request or enhancement

Comments

@picnixz
Copy link
Member
picnixz commented Oct 22, 2024

Feature or enhancement

Proposal:

The curses module raises an exception curses.error with a message of the form "XXX() returned ERR" where XXX is generally the name of the C or Python function that was just called. Most of the time, XXX and the Python function that was called have the same name and XXX is a real curses C function or macro. However, in some cases, this is not the case and the actual curses function that was called has a different name.

For debugging purposes, I suggest adding an attribute to the exception class, say .funcname which holds the name of the macro / function that was called at runtime in the C code. This will help users debug issues. For compatibility reasons, I will not change the current error messages since this could break CI in the wild. In addition, I don't expect users to extract the function name from the error message (if they want to, they should use this new attribute).

I considered also adding which Python function was the bad one, but since the exception is raised from a Python function, I think it's better not to do include an other attribute. If needed, we can always add it later but for now the curses C function name is more important.

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

No response

Linked PRs

@picnixz picnixz added type-feature A feature request or enhancement extension-modules C modules in the Modules dir labels Oct 22, 2024
@picnixz picnixz self-assigned this Oct 22, 2024
@picnixz picnixz moved this to Features in Curses issues Oct 22, 2024
@encukou
Copy link
Member
encukou commented Oct 23, 2024

That's a lot of code to carry. Do you have a use case where the you'd want to get the C function programmatically while debugging?

@picnixz
Copy link
Member Author
picnixz commented Oct 23, 2024

For me no. But I felt that having the precise function that cause the exception would be worthwhile, without having to change the actual messages that were printed. I took inspiration from OSError and its filename/filename2 attributes.

I think it could be useful in a debugger or to render a custom error message. Note that having the exact function is important since having the w or mw prefix may change the assumptions the caller may have.

But it's really a minor feature which I found nice to have. If you think the diff is too large (and it is large because of all the small changes), we can drop it. Note that I included a minor cosmetic change where I shortened the name of some functions just for future maintenance but this commit can be dropped.

@encukou
Copy link
Member
encukou commented Oct 23, 2024

But, is there a debugger that would want to add special handling specifically for curses.error?
If not, I recommend to drop this.

@picnixz
Copy link
Member Author
picnixz commented Oct 23, 2024

Not to my knowledge. I still think it's important to know which C function was the one that returned ERR (because the name of the function in the message is not always correct IMO) but if you prefer me to update the messages instead rather than adding an attribute, I can do it. If you think we should lie (a bit) to the user then we can keep the status quo.

@encukou
Copy link
Member
encukou commented Oct 23, 2024

Yes, if it's a genuine improvement, make it for everyone; change the str.

cc @Yhg1s as the curses expert

@picnixz
Copy link
Member Author
picnixz commented Apr 25, 2025

I'm back on the PR and I eventually just changed all error messages instead of adding a new class & co.

@picnixz picnixz changed the title Expose the name of the curses C function that caused the exception as an attribute of curses.error. Improve error messages of curses by including failed C function Apr 26, 2025
@picnixz picnixz changed the title Improve error messages of curses by including failed C function Improve error messages of curses by indicating failed C function Apr 26, 2025
picnixz added a commit that referenced this issue May 19, 2025
- Rename error helpers with a `curses_set_error_*` prefix instead of `PyCurses*`.
- Cleanly report both NULL and ERR cases.
- Raise `curses.error` in `is_linetouched` instead of a `TypeError`.
@picnixz
Copy link
Member Author
picnixz commented May 19, 2025

The rest will be addressed in #133579

@picnixz picnixz closed this as completed May 19, 2025
@github-project-automation github-project-automation bot moved this from Features to Done in Curses issues May 19, 2025
picnixz added a commit that referenced this issue May 20, 2025
While some `libcurses` functions are meant to return OK on success,
this is not always the case for all implementations. As such, we relax
the checks on the return values and allow any non-ERR value to be
considered equivalent to OK.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
extension-modules C modules in the Modules dir type-feature A feature request or enhancement
Projects
Status: Done
Development

No branches or pull requests

2 participants
0