如何检查 PyObject 是 Python C 扩展的字符串还是 Unicode

How to check if a PyObject is a String or Unicode for a Python C Extension

在 Python(2) 中,检查变量是 str 还是 unicode 类型的惯用方法是

isinstance(var, basestr)

Concrete Object Layer documentation 中,我没有看到任何类似 basestr 的东西。

目前我正在验证如下变量:

PyObject *key;
//...
if (!PyString_Check(key) && !PyUnicode_Check(key)) {
    PyErr_SetString(PyExc_ValueError, "Key must be string");
    return NULL;
}

有没有更简洁的方法来检查 PyObjectstr 还是 unicode 类型?

有一个 PyBaseString_Type(例如参见 [​​=14=],奇怪的是我在文档中也找不到它...)与 basestring 相同:

PyObject *key;
// ...
if (!PyObject_TypeCheck(key, &PyBaseString_Type)) {
    PyErr_SetString(PyExc_ValueError, "key must be a string.");
    return NULL;
}