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