Skip to content

ctypes: Improve error messages when converting to an incompatible type #107455

Closed
@tomasr8

Description

@tomasr8

This code produces an error with a somewhat unhelpful message:

from ctypes import *

printf = CDLL('libc.so.6').printf
printf.argtypes = [c_char_p, c_char_p]
printf(b"Value %s\n", 10)  # call with an incompatible argument
Traceback (most recent call last):
  File "/home/tomas/dev/cpython/error.py", line 5, in <module>
    printf(b"Value: %s\n", 10)
ctypes.ArgumentError: argument 2: TypeError: wrong type

The source code itself suggests providing a better message:

/* XXX better message */
PyErr_SetString(PyExc_TypeError,
"wrong type");

I suggest making the message more helpful by including the expected argument type and the type that was actually provided e.g.

- TypeError: wrong type
+ TypeError: 'int' object cannot be interpreted as ctypes.c_char_p

The same improvement can be applied to c_wchar_p and c_void_p.

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions