diff --git a/python/cells.cpp b/python/cells.cpp
index 9b136b034596d3ea4a5da0802fdee15dffa644ee..447a725ad74f7b03d301b3a360a7e14f39c41741 100644
--- a/python/cells.cpp
+++ b/python/cells.cpp
@@ -220,7 +220,7 @@ void register_cells(pybind11::module& m) {
         .def("__getitem__",
             [](label_dict_proxy& l, const char* name) {
                 if (!l.cache.count(name)) {
-                    throw std::runtime_error(util::pprintf("\nKeyError: '{}'", name));
+                    throw pybind11::key_error(name);
                 }
                 return l.cache.at(name);
             })
diff --git a/python/mechanism.cpp b/python/mechanism.cpp
index a2c93be2c0a6e15cb2258f84226dd134578cdf3a..18dab8fe4af7bfc710ab46525631d7fcce8cf5d0 100644
--- a/python/mechanism.cpp
+++ b/python/mechanism.cpp
@@ -135,7 +135,7 @@ void register_mechanisms(pybind11::module& m) {
                     return c[name];
                 }
                 catch (...) {
-                    throw std::runtime_error(util::pprintf("\nKeyError: '{}'", name));
+                    throw pybind11::key_error(name);
                 }
             })
         .def("extend", &arb::mechanism_catalogue::import,