diff --git a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/getTree.cxx b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/getTree.cxx
index 34dc02661a9d32e678c1db178dd65cbbfb61987b..1b8a468a5a549b897168f1f5eeb97cbd79fb7c15 100644
--- a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/getTree.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/getTree.cxx
@@ -43,6 +43,9 @@ namespace H5Utils {
     }
     std::set<std::string> keys;
     int n_keys = file->GetListOfKeys()->GetSize();
+    if (n_keys == 0) {
+      throw std::logic_error("no keys found in file");
+    }
     for (int keyn = 0; keyn < n_keys; keyn++) {
       keys.insert(file->GetListOfKeys()->At(keyn)->GetName());
     }
diff --git a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/ttree2hdf5.cxx b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/ttree2hdf5.cxx
index 3f7929f5f9402f273085bd3dbdaecca109c3fd2c..0b67ad68836847acae29290b75965a5d958faaa2 100644
--- a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/ttree2hdf5.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/ttree2hdf5.cxx
@@ -14,7 +14,18 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 #include <iostream>
 #include <memory>
 
+int run(int argc, char* argv[]);
+
 int main(int argc, char* argv[]) {
+  try {
+    return run(argc, argv);
+  } catch (std::logic_error& e) {
+    std::cerr << "ERROR: " << e.what() << ", quitting." << std::endl;
+    return 1;
+  }
+}
+
+int run(int argc, char* argv[]) {
   using namespace H5Utils;
   AppOpts opts = getTreeCopyOpts(argc, argv);