CPython C API - error handling

0

Szybkie pytanie - czy ta linijka kodu jest poprawna? https://github.com/python-pillow/Pillow/blob/master/_webp.c#L148
Nie rozumiem dlaczego tam nie ma:

return NULL;

albo

PyErr_Clear();
Py_RETURN_NONE;
0

Nie bardzo cie rozumiem. Przecież Py_RETURN_NONE to jest makro które się rozwija właśnie do czegoś w stylu return null z tym że None w pythonie to jest faktyczny obiekt (patrz: NULL Object Pattern)

0
Shalom napisał(a):

Nie bardzo cie rozumiem. Przecież Py_RETURN_NONE to jest makro które się rozwija właśnie do czegoś w stylu return null z tym że None w pythonie to jest faktyczny obiekt (patrz: NULL Object Pattern)

Nie no, Py_None to nie jest NULL.
Z tego co czytałem w docsach to:
jeżeli PyArg_ParseTuple zwróci false to należy podać wyjątek dalej przez

return NULL;

(ew. -1 jak jest jakaś inna funkcja)
albo robić sobie co tam chcą (w tym wypadku zwrócić Py_None) ale czyszcząc błąd który ustawiło ParseTuple.
Właśnie się dziwię czy można sobie zwrócić Py_None bez czyszczenia błędu.

Edit 1:
Jak tak teraz myślę, to mógł sobie autor wymyśleć, że zamiast zwracać -1, NULL zwraca None i wtedy coś robi z wyjątkiem.

Edit 2:
Chyba jedyny usage tej funkcji jest tu:
https://github.com/python-pillow/Pillow/blob/master/PIL/WebPImagePlugin.py#L31
Jak zwrócą None to poleci TypeError: 'NoneType' object is not iterable i się zastanawiam co z tym wyjątkiem pod spodem od PyArg_ParseTuple się stanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1