fix: conversion to string in python bindings

If provided `PyObject` can't be converted to string `TypeError` is
 reported instead of `SytemError` without any message.
This commit is contained in:
Vadim Levin
2020-12-16 13:30:11 +03:00
parent a9edcc1705
commit 7b0d7d0c9a
3 changed files with 38 additions and 2 deletions
+17 -1
View File
@@ -963,15 +963,31 @@ PyObject* pyopencv_from(const std::string& value)
template<>
bool pyopencv_to(PyObject* obj, String &value, const ArgInfo& info)
{
CV_UNUSED(info);
if(!obj || obj == Py_None)
{
return true;
}
std::string str;
if (getUnicodeString(obj, str))
{
value = str;
return true;
}
else
{
// If error hasn't been already set by Python conversion functions
if (!PyErr_Occurred())
{
// Direct access to underlying slots of PyObjectType is not allowed
// when limited API is enabled
#ifdef Py_LIMITED_API
failmsg("Can't convert object to 'str' for '%s'", info.name);
#else
failmsg("Can't convert object of type '%s' to 'str' for '%s'",
obj->ob_type->tp_name, info.name);
#endif
}
}
return false;
}