On Sat, Feb 01, 2020 at 01:52:38AM +0200, Alex Hall wrote:
Here's a simple runtime implementation that doesn't require any dependencies or source code access:
import dis
So this is not likely to ever work in IronPython or Jython. There are no stability guarantees about the byte-code generated by CPython, so you may be chasing a moving target here. You ought to test your code before posting, because I've tried it in 3.5, 3.7 and 3.8 and I get the same error each time: TypeError: Expected maxsize to be an integer or None which is a simple error in the call to the lru_cache decorator. After fixing that, I tried it again in 3.7 and I get this: >>> x = 1 >>> nameof.nameof(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/srv-steve/python/nameof.py", line 7, in nameof return _nameof(frame.f_code, frame.f_lasti) File "/home/srv-steve/python/nameof.py", line 17, in _nameof assert current_instruction.opname == "CALL_FUNCTION" AssertionError -- Steven