@@ -294,10 +294,16 @@ class cpp_function : public function {
294294 if (result != (PyObject *) 1 )
295295 break ;
296296 }
297- } catch (const error_already_set &) { return nullptr ;
298- } catch (const index_error &e) { PyErr_SetString (PyExc_IndexError, e.what ()); return nullptr ;
299- } catch (const stop_iteration &e) { PyErr_SetString (PyExc_StopIteration, e.what ()); return nullptr ;
300- } catch (const std::exception &e) { PyErr_SetString (PyExc_RuntimeError, e.what ()); return nullptr ;
297+ } catch (const error_already_set &) { return nullptr ;
298+ } catch (const index_error &e) { PyErr_SetString (PyExc_IndexError, e.what ()); return nullptr ;
299+ } catch (const stop_iteration &e) { PyErr_SetString (PyExc_StopIteration, e.what ()); return nullptr ;
300+ } catch (const std::bad_alloc &e) { PyErr_SetString (PyExc_MemoryError, e.what ()); return nullptr ;
301+ } catch (const std::domain_error &e) { PyErr_SetString (PyExc_ValueError, e.what ()); return nullptr ;
302+ } catch (const std::invalid_argument &e) { PyErr_SetString (PyExc_ValueError, e.what ()); return nullptr ;
303+ } catch (const std::length_error &e) { PyErr_SetString (PyExc_ValueError, e.what ()); return nullptr ;
304+ } catch (const std::out_of_range &e) { PyErr_SetString (PyExc_IndexError, e.what ()); return nullptr ;
305+ } catch (const std::range_error &e) { PyErr_SetString (PyExc_ValueError, e.what ()); return nullptr ;
306+ } catch (const std::exception &e) { PyErr_SetString (PyExc_RuntimeError, e.what ()); return nullptr ;
301307 } catch (...) {
302308 PyErr_SetString (PyExc_RuntimeError, " Caught an unknown exception!" );
303309 return nullptr ;
0 commit comments