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;
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;
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)
Shalom napisał(a):
Nie bardzo cie rozumiem. Przecież
Py_RETURN_NONE
to jest makro które się rozwija właśnie do czegoś w stylureturn 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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.