scripts: Adopted dat tweak in other scripts

This just makes dat behave similarly to Python's getattr, etc:

- dat("bogus")       -> raises ValueError
- dat("bogus", 1234) -> returns 1234

This replaces try_dat, which is easy to forget about when copy-pasting
between scripts.

Though all of this wouldn't be necessary if only we could catch
exceptions in expressions...
This commit is contained in:
Christopher Haster
2025-03-10 20:31:13 -05:00
parent e780fd40f7
commit c60301719a
5 changed files with 102 additions and 94 deletions
+2 -2
View File
@@ -1296,11 +1296,11 @@ def punescape(s, attrs=None):
f = m.group('format') f = m.group('format')
if f[-1] in 'dboxX': if f[-1] in 'dboxX':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = int(v) v = int(v)
elif f[-1] in 'fFeEgG': elif f[-1] in 'fFeEgG':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = float(v) v = float(v)
else: else:
f = ('<' if '-' in f else '>') + f.replace('-', '') f = ('<' if '-' in f else '>') + f.replace('-', '')
+10 -8
View File
@@ -245,7 +245,8 @@ class RingIO:
# parse different data representations # parse different data representations
def dat(x): def dat(x, *args):
try:
# allow the first part of an a/b fraction # allow the first part of an a/b fraction
if '/' in x: if '/' in x:
x, _ = x.split('/', 1) x, _ = x.split('/', 1)
@@ -265,11 +266,12 @@ def dat(x):
# else give up # else give up
raise ValueError("invalid dat %r" % x) raise ValueError("invalid dat %r" % x)
def try_dat(x): # default on error?
try: except ValueError as e:
return dat(x) if args:
except ValueError: return args[0]
return None else:
raise
def collect(csv_paths, defines=[]): def collect(csv_paths, defines=[]):
# collect results from CSV files # collect results from CSV files
@@ -495,11 +497,11 @@ def punescape(s, attrs=None):
f = m.group('format') f = m.group('format')
if f[-1] in 'dboxX': if f[-1] in 'dboxX':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = int(v) v = int(v)
elif f[-1] in 'fFeEgG': elif f[-1] in 'fFeEgG':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = float(v) v = float(v)
else: else:
f = ('<' if '-' in f else '>') + f.replace('-', '') f = ('<' if '-' in f else '>') + f.replace('-', '')
+10 -8
View File
@@ -169,7 +169,8 @@ def openio(path, mode='r', buffering=-1):
return open(path, mode, buffering) return open(path, mode, buffering)
# parse different data representations # parse different data representations
def dat(x): def dat(x, *args):
try:
# allow the first part of an a/b fraction # allow the first part of an a/b fraction
if '/' in x: if '/' in x:
x, _ = x.split('/', 1) x, _ = x.split('/', 1)
@@ -189,11 +190,12 @@ def dat(x):
# else give up # else give up
raise ValueError("invalid dat %r" % x) raise ValueError("invalid dat %r" % x)
def try_dat(x): # default on error?
try: except ValueError as e:
return dat(x) if args:
except ValueError: return args[0]
return None else:
raise
def collect(csv_paths, defines=[]): def collect(csv_paths, defines=[]):
# collect results from CSV files # collect results from CSV files
@@ -419,11 +421,11 @@ def punescape(s, attrs=None):
f = m.group('format') f = m.group('format')
if f[-1] in 'dboxX': if f[-1] in 'dboxX':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = int(v) v = int(v)
elif f[-1] in 'fFeEgG': elif f[-1] in 'fFeEgG':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = float(v) v = float(v)
else: else:
f = ('<' if '-' in f else '>') + f.replace('-', '') f = ('<' if '-' in f else '>') + f.replace('-', '')
+10 -8
View File
@@ -46,7 +46,8 @@ def openio(path, mode='r', buffering=-1):
return open(path, mode, buffering) return open(path, mode, buffering)
# parse different data representations # parse different data representations
def dat(x): def dat(x, *args):
try:
# allow the first part of an a/b fraction # allow the first part of an a/b fraction
if '/' in x: if '/' in x:
x, _ = x.split('/', 1) x, _ = x.split('/', 1)
@@ -66,11 +67,12 @@ def dat(x):
# else give up # else give up
raise ValueError("invalid dat %r" % x) raise ValueError("invalid dat %r" % x)
def try_dat(x): # default on error?
try: except ValueError as e:
return dat(x) if args:
except ValueError: return args[0]
return None else:
raise
def collect(csv_paths, defines=[]): def collect(csv_paths, defines=[]):
# collect results from CSV files # collect results from CSV files
@@ -279,11 +281,11 @@ def punescape(s, attrs=None):
f = m.group('format') f = m.group('format')
if f[-1] in 'dboxX': if f[-1] in 'dboxX':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = int(v) v = int(v)
elif f[-1] in 'fFeEgG': elif f[-1] in 'fFeEgG':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = float(v) v = float(v)
else: else:
f = ('<' if '-' in f else '>') + f.replace('-', '') f = ('<' if '-' in f else '>') + f.replace('-', '')
+10 -8
View File
@@ -62,7 +62,8 @@ def openio(path, mode='r', buffering=-1):
return open(path, mode, buffering) return open(path, mode, buffering)
# parse different data representations # parse different data representations
def dat(x): def dat(x, *args):
try:
# allow the first part of an a/b fraction # allow the first part of an a/b fraction
if '/' in x: if '/' in x:
x, _ = x.split('/', 1) x, _ = x.split('/', 1)
@@ -82,11 +83,12 @@ def dat(x):
# else give up # else give up
raise ValueError("invalid dat %r" % x) raise ValueError("invalid dat %r" % x)
def try_dat(x): # default on error?
try: except ValueError as e:
return dat(x) if args:
except ValueError: return args[0]
return None else:
raise
def collect(csv_paths, defines=[]): def collect(csv_paths, defines=[]):
# collect results from CSV files # collect results from CSV files
@@ -295,11 +297,11 @@ def punescape(s, attrs=None):
f = m.group('format') f = m.group('format')
if f[-1] in 'dboxX': if f[-1] in 'dboxX':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = int(v) v = int(v)
elif f[-1] in 'fFeEgG': elif f[-1] in 'fFeEgG':
if isinstance(v, str): if isinstance(v, str):
v = try_dat(v) or 0 v = dat(v, 0)
v = float(v) v = float(v)
else: else:
f = ('<' if '-' in f else '>') + f.replace('-', '') f = ('<' if '-' in f else '>') + f.replace('-', '')