# ... magic stuff ...
py> alpha = 'something'
py> M(alpha)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in M
TypeError: 'NoneType' object is not subscriptable
Yep. It works in IPython and it works in a script, but I didn't try the plain Python shell. I'm using Python 3.8, but I imagine the same problem exists between IPython and Python shell in other versions.
etc, and how many hours of debugging it will take to get it to work.
Some positive but finite number of hours to deal with the edge cases. For the discussion, can we just stipulate some future L() that is a better version of M()?
(base) 551-bin % python auto-dict.py
{'alpha': 'something'}
args: ()
kws: {'alpha': 'something', 'beta': 'else', 'gamma': 'again'}
(base) 552-bin % cat auto-dict.py
from magic import M
alpha = 'something'
beta = 'else'
gamma = 'again'
print(M(alpha))
def show(*args, **kws):
print('args:', args)
print('kws:', kws)
show(**M(alpha, beta, gamma))
I'm also looking at that call to eval and wondering if someone smarter
than me can use that to trick me into evaluating something I don't like.
Yes... in L() is should be `ast.literal_eval()`.
Maybe I'll write a better L() in the next day or two. But I really AM NOT pushing for anyone to use such a thing, just to consider the conceptual space it occupies vs. having new syntax.
--