From 1618aed086e2f5def15717903a9e176162009fc2 Mon Sep 17 00:00:00 2001 From: anjakefala Date: Fri, 1 Dec 2023 22:14:31 -0800 Subject: [PATCH] [perf-] Fallback to getattrdeep if len(row) < index Comes up with e.g. errors.csv where there are extra newlines and fields in a subset of csv rows. Some rows will be shorter, and will result in an IndexError when getitemdeep tries to grab their value for a later column. Builds on c324fca6ba24c1269f7686890a9a560ec3f408b6 --- visidata/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/visidata/utils.py b/visidata/utils.py index b243c0402..c1b761d00 100644 --- a/visidata/utils.py +++ b/visidata/utils.py @@ -130,7 +130,10 @@ def setattrdeep(obj, attr, val, getter=getattr, setter=setattr): def getitemdeep(obj, k, *default): if not isinstance(k, str): - return obj[k] + try: + return obj[k] + except IndexError: + pass return getattrdeep(obj, k, *default, getter=getitem) def setitemdeep(obj, k, val):