On Tue, Oct 20, 2020, 9:17 PM Chris Angelico
Please explain how it's "spooky action at a distance" if it's a
self-contained assignment statement?
I'm not Steven, but I think I'm the first one in the thread to use Einstein's phrase. As I understand your current semantics, that phrase is not the problem.
My initial impression of your intent was:
foo, bar = 42, 99
# ... a million lines ...
line = "123/"
# ... more lines ...
f"{foo}/{bar}" = line
# raises if bar wasn't previously set
# binds to prior value if it was set
But I think what you want is for the binding line never to raise, but also not to have any local means to know whether 'bar' is a name after that line. Or whether 'foo' is, for that matter.
Of course, you could test the name, e.g.:
try:
bar
except:
bar = remediate()
But that's cumbersome. Overall, I'd find the spooky action at a distance less troubling.
In contrast, this is straightforward:
line = "123/"
pat = "{foo}/{bar}"
dct = scan2dict(pat, line)
It's either going to create a dictionary of raise an exception. Or maybe a version of the function might make a dataclass or namedtuple instead.
I'm not sure exactly what the pattern language might look like, but whatever its details, everything is locally available.