diff --git a/src/taggingbackends/data/labels.py b/src/taggingbackends/data/labels.py
index e2b93ad59c98dc9e2e86584be438592b5bcf8bb7..fc9bf9b2dc7e2ec07eff960c5a5a01f585666d62 100644
--- a/src/taggingbackends/data/labels.py
+++ b/src/taggingbackends/data/labels.py
@@ -177,8 +177,10 @@ class Labels:
             elif len(key) == 3:
                 run, larva, timestamp = key
                 self.set_timestep(run, larva, timestamp, value)
+            elif len(key) < 1:
+                raise IndexError("too few dimensions")
             else:
-                raise IndexError("too few of many dimensions")
+                raise IndexError("too many dimensions")
         else:
             run = key
             self.set_run(run, value)
diff --git a/src/taggingbackends/main.py b/src/taggingbackends/main.py
index dde5335e0a03a7620aa8a334c59bc9fb800bc636..f530b149389f3eaba15cca571a46603acb349eed 100644
--- a/src/taggingbackends/main.py
+++ b/src/taggingbackends/main.py
@@ -14,6 +14,7 @@ Usage:  tagging-backend [train|predict] --model-instance <name>
         tagging-backend train ... --skip-make-dataset --skip-build-features
         tagging-backend predict ... --make-dataset --build-features
         tagging-backend predict ... --sandbox <token>
+        tagging-backend --help
 
 `tagging-backend` typically is run using `poetry run`.
 A name must be provided to identify the trained model and its location within
@@ -83,9 +84,9 @@ def main(fun=None):
             format="%(levelname)s:%(name)s: %(message)s")
     if fun is None:
         # called by scripts/tagging-backend
-        if not sys.argv[1:]:
+        if not sys.argv[1:] or any(arg == '--help' for arg in sys.argv):
             help(True)
-            sys.exit("too few input arguments; subcommand expected: 'train' or 'predict'")
+            #sys.exit("too few input arguments; subcommand expected: 'train' or 'predict'")
             return
         train_or_predict = sys.argv[1]
         project_dir = model_instance = None