Leveldb doesn't throw exceptions per se. But both the bindings and leveldb itself uses stl containers which uses allocators that throw bad_alloc. We should probably have a try/catch for each entry point catching bad allocs and returning the corresponding leveldb::Status.