Skip to content

Commit 2b9fdbe

Browse files
committed
ENH: add more error conversions
1 parent 61d67f0 commit 2b9fdbe

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

include/pybind11/pybind11.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)