diff --git a/include/opendht/callbacks.h b/include/opendht/callbacks.h
index 7cdcc632285a7478384d2299c1655d884cb4a1dd..829b78768eba8de651ea8e19182e18e82352c15d 100644
--- a/include/opendht/callbacks.h
+++ b/include/opendht/callbacks.h
@@ -176,12 +176,12 @@ using CertificateStoreQuery = std::function<std::vector<std::shared_ptr<crypto::
 using DoneCallback = std::function<void(bool success, const std::vector<std::shared_ptr<Node>>& nodes)>;
 using DoneCallbackSimple = std::function<void(bool success)>;
 
-typedef bool (*GetCallbackRaw)(std::shared_ptr<Value>, void *user_data) noexcept(false);
-typedef bool (*ValueCallbackRaw)(std::shared_ptr<Value>, bool expired, void *user_data) noexcept(false);
-typedef void (*DoneCallbackRaw)(bool, std::vector<std::shared_ptr<Node>>*, void *user_data) noexcept(false);
-typedef void (*ShutdownCallbackRaw)(void *user_data) noexcept(false);
-typedef void (*DoneCallbackSimpleRaw)(bool, void *user_data) noexcept(false);
-typedef bool (*FilterRaw)(const Value&, void *user_data) noexcept(false);
+typedef bool (*GetCallbackRaw)(std::shared_ptr<Value>, void *user_data);
+typedef bool (*ValueCallbackRaw)(std::shared_ptr<Value>, bool expired, void *user_data);
+typedef void (*DoneCallbackRaw)(bool, std::vector<std::shared_ptr<Node>>*, void *user_data);
+typedef void (*ShutdownCallbackRaw)(void *user_data);
+typedef void (*DoneCallbackSimpleRaw)(bool, void *user_data);
+typedef bool (*FilterRaw)(const Value&, void *user_data);
 
 
 OPENDHT_PUBLIC GetCallbackSimple bindGetCb(GetCallbackRaw raw_cb, void* user_data);
diff --git a/python/opendht.pyx b/python/opendht.pyx
index a1f0118bcb050b98fc9ba9aa53d0eda54e1bfb1f..1dcfc773fb11619ec8c7575dadbcb787663ab0af 100644
--- a/python/opendht.pyx
+++ b/python/opendht.pyx
@@ -42,7 +42,7 @@ cimport opendht_cpp as cpp
 
 import threading
 
-cdef inline void lookup_callback(cpp.vector[cpp.shared_ptr[cpp.IndexValue]]* values, cpp.Prefix* p, void *user_data) with gil:
+cdef inline void lookup_callback(cpp.vector[cpp.shared_ptr[cpp.IndexValue]]* values, cpp.Prefix* p, void *user_data) noexcept with gil:
     cbs = <object>user_data
     if 'lookup' in cbs and cbs['lookup']:
         vals = []
@@ -52,13 +52,13 @@ cdef inline void lookup_callback(cpp.vector[cpp.shared_ptr[cpp.IndexValue]]* val
             vals.append(v)
         cbs['lookup'](vals, p.toString())
 
-cdef inline void shutdown_callback(void* user_data) with gil:
+cdef inline void shutdown_callback(void* user_data) noexcept with gil:
     cbs = <object>user_data
     if 'shutdown' in cbs and cbs['shutdown']:
         cbs['shutdown']()
     ref.Py_DECREF(cbs)
 
-cdef inline bool get_callback(shared_ptr[cpp.Value] value, void *user_data) with gil:
+cdef inline bool get_callback(shared_ptr[cpp.Value] value, void *user_data) noexcept with gil:
     cbs = <object>user_data
     cb = cbs['get']
     f = cbs['filter'] if 'filter' in cbs else None
@@ -66,7 +66,7 @@ cdef inline bool get_callback(shared_ptr[cpp.Value] value, void *user_data) with
     pv._value = value
     return cb(pv) if not f or f(pv) else True
 
-cdef inline bool value_callback(shared_ptr[cpp.Value] value, bool expired, void *user_data) with gil:
+cdef inline bool value_callback(shared_ptr[cpp.Value] value, bool expired, void *user_data) noexcept with gil:
     cbs = <object>user_data
     cb = cbs['valcb']
     f = cbs['filter'] if 'filter' in cbs else None
@@ -74,7 +74,7 @@ cdef inline bool value_callback(shared_ptr[cpp.Value] value, bool expired, void
     pv._value = value
     return cb(pv, expired) if not f or f(pv) else True
 
-cdef inline void done_callback(bool done, cpp.vector[shared_ptr[cpp.Node]]* nodes, void *user_data) with gil:
+cdef inline void done_callback(bool done, cpp.vector[shared_ptr[cpp.Node]]* nodes, void *user_data) noexcept with gil:
     node_ids = []
     for n in deref(nodes):
         h = NodeEntry()
@@ -86,7 +86,7 @@ cdef inline void done_callback(bool done, cpp.vector[shared_ptr[cpp.Node]]* node
         cbs['done'](done, node_ids)
     ref.Py_DECREF(cbs)
 
-cdef inline void done_callback_simple(bool done, void *user_data) with gil:
+cdef inline void done_callback_simple(bool done, void *user_data) noexcept with gil:
     cbs = <object>user_data
     if 'done' in cbs and cbs['done']:
         cbs['done'](done)