aboutsummaryrefslogtreecommitdiff
path: root/r_qtl
diff options
context:
space:
mode:
Diffstat (limited to 'r_qtl')
-rw-r--r--r_qtl/r_qtl2.py35
1 files changed, 19 insertions, 16 deletions
diff --git a/r_qtl/r_qtl2.py b/r_qtl/r_qtl2.py
index a8958a0..d3a3805 100644
--- a/r_qtl/r_qtl2.py
+++ b/r_qtl/r_qtl2.py
@@ -189,23 +189,26 @@ def file_data(zfile: ZipFile,
[str, tuple[str, ...], tuple[str, ...]],
tuple[dict, ...]] = __default_process_value_transposed__) -> Iterator[dict]:
"""Load data from files in R/qtl2 zip bundle."""
- if isinstance(cdata[member_key], list):
- for row in (line for lines in
- (file_data(
- zfile, member_key, {**cdata, member_key: innerfile},
- process_value, process_transposed_value)
- for innerfile in cdata[member_key])
- for line in lines):
- yield row
- return
- if not cdata.get(f"{member_key}_transposed", False):
- for row in with_non_transposed(zfile, member_key, cdata, process_value):
- yield row
- return
+ try:
+ if isinstance(cdata[member_key], list):
+ for row in (line for lines in
+ (file_data(
+ zfile, member_key, {**cdata, member_key: innerfile},
+ process_value, process_transposed_value)
+ for innerfile in cdata[member_key])
+ for line in lines):
+ yield row
+ return
+ if not cdata.get(f"{member_key}_transposed", False):
+ for row in with_non_transposed(zfile, member_key, cdata, process_value):
+ yield row
+ return
- for row in with_transposed(
- zfile, member_key, cdata, process_transposed_value):
- yield row
+ for row in with_transposed(
+ zfile, member_key, cdata, process_transposed_value):
+ yield row
+ except KeyError as exc:
+ raise InvalidFormat(*exc.args) from exc
def cross_information(zfile: ZipFile, cdata: dict) -> Iterator[dict]:
"""Load cross information where present."""