diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py
index 9424134e688c0f7d8b56ac4e1aed272f97f7c723..d2e30de5a99faa1d4c9f6d4753f656ede49b0c46 100644
--- a/src/caosadvancedtools/cfood.py
+++ b/src/caosadvancedtools/cfood.py
@@ -693,7 +693,7 @@ def assure_has_property(entity, name, value, to_be_updated=None,
 
             try:
                 compare_time = datetime.fromisoformat(el.value)
-            except ValueError:
+            except ValueError as e:
                 # special case of wrong iso format
                 # time zone
                 tmp = el.value.split("+")
@@ -711,7 +711,7 @@ def assure_has_property(entity, name, value, to_be_updated=None,
                         ms = '.' + tmp[1] + '0'*(6-len(tmp[1]))
                     else:
                         raise ValueError(
-                            "invalid millisecond format in {}".format(el.value))
+                            "invalid millisecond format in {}".format(el.value)) from e
                 else:
                     ms = ""
                 tmp = tmp[0] + ms + tz_str
diff --git a/src/caosadvancedtools/pandoc_header_tools.py b/src/caosadvancedtools/pandoc_header_tools.py
index a6879565dbbe80a7bb22c041ff56f59f04b623ec..fec27cdbb33cf963d01e40b61c04ae2613f5fe17 100644
--- a/src/caosadvancedtools/pandoc_header_tools.py
+++ b/src/caosadvancedtools/pandoc_header_tools.py
@@ -141,7 +141,7 @@ it is not at the beginning, it must be preceded by a blank line.
         try:
             yaml_part = yaml.load("\n".join(headerlines), Loader=yaml.BaseLoader)
         except yaml.scanner.ScannerError as e:
-            raise ParseErrorsInHeader(filename, e)
+            raise ParseErrorsInHeader(filename, e) from e
         # except yaml.error.MarkedYAMLError as e:
         #     raise NoValidHeader(filename)
         if not isinstance(yaml_part, dict):
diff --git a/src/caosadvancedtools/table_export.py b/src/caosadvancedtools/table_export.py
index 78830b19a8f0274d4416a4a8faaa55de485cbc51..1805419b1f5a63adec4ccabb554b24281fcc44bf 100644
--- a/src/caosadvancedtools/table_export.py
+++ b/src/caosadvancedtools/table_export.py
@@ -125,10 +125,10 @@ class BaseTableExporter(object):
             try:
                 with open(export_dict, encoding="utf-8") as tmp:
                     self.export_dict = json.load(tmp)
-            except Exception:
+            except Exception as e:
                 raise ValueError(
                     "export_dict must be either a dictionary"
-                    " or the path to a json file.")
+                    " or the path to a json file.") from e
         self.record = record
         self._check_sanity_of_export_dict()
         self.raise_error_if_missing = raise_error_if_missing
@@ -159,7 +159,7 @@ class BaseTableExporter(object):
                     logger.debug(exc)
                     errmssg = "Empty or invalid query '{}' for entry {}".format(
                         q, e)
-                    raise TableExportError(errmssg)
+                    raise TableExportError(errmssg) from exc
 
                 if val is not None:
                     self.info[e] = val
@@ -189,7 +189,7 @@ class BaseTableExporter(object):
                         errmssg += ", nor does record {} have a property of that name".format(
                             self.record.id)
                     errmssg += "."
-                    raise TableExportError(errmssg)
+                    raise TableExportError(errmssg) from exc
 
         if self.missing:
             errmssg = "The following mandatory entries are missing:\n"
diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py
index b3977b395f0e74561108baf1a783a3d5a126ed69..b061092ee9598eb847b745eec13dde75df10151f 100755
--- a/src/caosadvancedtools/table_importer.py
+++ b/src/caosadvancedtools/table_importer.py
@@ -497,7 +497,7 @@ class XLSImporter(TableImporter):
                                                      str(e)),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
-            raise DataInconsistencyError(*e.args)
+            raise DataInconsistencyError(*e.args) from e
 
         if len(xls_file.sheet_names) > 1:
             # Multiple sheets is the default now. Only show in debug
@@ -515,7 +515,7 @@ class XLSImporter(TableImporter):
                 "Cannot parse {}.\n{}".format(filename, e),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
-            raise DataInconsistencyError(*e.args)
+            raise DataInconsistencyError(*e.args) from e
 
         df = self.check_dataframe(df, filename)
 
@@ -537,7 +537,7 @@ class CSVImporter(TableImporter):
                 "Cannot parse {}.\n{}".format(filename, ve),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
-            raise DataInconsistencyError(*ve.args)
+            raise DataInconsistencyError(*ve.args) from ve
         except TypeError as te:
             # Iterate through the columns and rows to identify
             # problematic cells with wrong types.
@@ -577,7 +577,7 @@ class CSVImporter(TableImporter):
                 for err in error_list:
                     msg += f"  * column \"{err[0]}\": Expected \"{err[1]}\" but found \"{err[2]}\".\n"
                 msg += '\n'
-            raise DataInconsistencyError(msg)
+            raise DataInconsistencyError(msg) from te
 
         df = self.check_dataframe(df, filename)