]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Make error exceptions more helpful
authorHenryk Plötz <henryk@ploetzli.ch>
Thu, 9 Aug 2018 10:30:02 +0000 (12:30 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/parser.py

index 26c0664a18ae5955fcd573b936bbb1bab438cb97..11f864c7fbc4698dd216ec54cf80de8517f57b46 100644 (file)
@@ -193,29 +193,36 @@ class FinTS3Parser:
             is_last = number == len(retval._fields)-1
 
             if not repeat:
-                if not constructed:
-                    try:
-                        setattr(retval, name, next(data_i))
-                    except StopIteration:
-                        if required and field.required:
-                            raise ValueError("Required field {}.{} was not present".format(retval.__class__.__name__, name))
-                        break
-                else:
-                    deg = self.parse_deg(field.type, data_i, required and field.required)
-                    setattr(retval, name, deg)
-            else:
-                i = 0
-                while True:
+                try:
                     if not constructed:
                         try:
-                            getattr(retval, name)[i] = next(data_i)
+                            setattr(retval, name, next(data_i))
                         except StopIteration:
+                            if required and field.required:
+                                raise ValueError("Required field {}.{} was not present".format(retval.__class__.__name__, name))
                             break
-
                     else:
-                        require_last = (field.max_count is None) if is_last else True
-                        deg = self.parse_deg(field.type, data_i, require_last and required and field.required)
-                        getattr(retval, name)[i] = deg
+                        deg = self.parse_deg(field.type, data_i, required and field.required)
+                        setattr(retval, name, deg)
+                except ValueError as e:
+                    raise ValueError("Wrong input when setting {}.{}".format(retval.__class__.__name__, name)) from e
+            else:
+                i = 0
+                while True:
+                    try:
+                        if not constructed:
+                            try:
+                                getattr(retval, name)[i] = next(data_i)
+                            except StopIteration:
+                                break
+
+                        else:
+                            require_last = (field.max_count is None) if is_last else True
+                            deg = self.parse_deg(field.type, data_i, require_last and required and field.required)
+                            getattr(retval, name)[i] = deg
+
+                    except ValueError as e:
+                        raise ValueError("Wrong input when setting {}.{}".format(retval.__class__.__name__, name)) from e
 
                     i = i + 1