0
我有一個用C++編寫的Python擴展,它需要一個bytearray作爲第一個參數。它工作正常,但如果我從Python傳遞其他東西,如字符串或數字,我會遇到分段錯誤。如何檢查輸入是真的一個bytearray,然後提出一個異常,如果它是別的東西?如何從Python擴展中檢查輸入變量有效性?
我有一個用C++編寫的Python擴展,它需要一個bytearray作爲第一個參數。它工作正常,但如果我從Python傳遞其他東西,如字符串或數字,我會遇到分段錯誤。如何檢查輸入是真的一個bytearray,然後提出一個異常,如果它是別的東西?如何從Python擴展中檢查輸入變量有效性?
這應有助於:http://docs.python.org/2/faq/extending.html#id8
測試一個對象的類型,首先要確保它不是
NULL
,然後用PyString_Check()
,PyTuple_Check()
,PyList_Check()
等
具體,它看起來像你想要的:http://docs.python.org/2/c-api/bytearray.html#type-check-macros
int PyByteArray_Check(PyObject *o)
如果對象o是bytearray對象或bytearray類型的子類型的實例,則返回true。
工作。什麼是NULL的檢查?我嘗試從Python傳遞None,但該對象仍然不是NULL。 – Crypto
這是一個建議,以防萬一你的指針碰巧是NULL。他們說'PyByteArray_Check'函數不會執行任何空的檢查,所以如果你傳遞一個空指針,它會發生段錯誤。 – Aphex
如果碰巧是NULL,我該怎麼辦?只要引發異常或返回NULL? – Crypto