2017-02-01 11 views
1

В Python (2), идиоматических способ проверить, является ли переменная из str или unicode типаКак проверить, если PyObject является строка или Unicode для Python C Extension

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; 
} 

Есть более краткий способ проверить, если PyObject имеет типа str или unicode?

ответ

1

Существует PyBaseString_Type (смотри, например, stringobject.h, как ни странно, я тоже не мог найти в документации ...), которая идентична basestring:

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

Спасибо - и только, чтобы подтвердить, есть нет функции 'PyBaseString_Check', которая избавит вас от необходимости проходить в' & PyBaseString_Type'? –

+0

@MatthewMoisen к сожалению, нет 'PyBaseString_Check'. – MSeifert