New submission from Iestyn Elfick: The functions inspect.getsource() and inspect.getsourcelines() return inconsistent results for frames corresponding to class definitions within a function.
Test code: import sys import inspect def case1(): class C: def __init__(self): pass c = C() def case2(): a = 1 class C: def __init__(self): pass c = C() def case3(): def fn(): pass class C: def __init__(self): pass c = C() def trace(frame,event,arg): code = frame.f_code print('name:',code.co_name) print('source:\n',inspect.getsource(code),'\n') for case in ('case1','case2','case3'): print('#####',case) call = getattr(sys.modules[__name__],case) sys.settrace(trace) try: call() finally: sys.settrace(None) Result: ##### case1 name: case1 source: def case1(): class C: def __init__(self): pass c = C() name: C source: def case1(): class C: def __init__(self): pass c = C() name: __init__ source: def __init__(self): pass ##### case2 name: case2 source: def case2(): a = 1 class C: def __init__(self): pass c = C() name: C source: def case2(): a = 1 class C: def __init__(self): pass c = C() name: __init__ source: def __init__(self): pass ##### case3 name: case3 source: def case3(): def fn(): pass class C: def __init__(self): pass c = C() name: C source: def fn(): pass name: __init__ source: def __init__(self): pass The source listed for frames named 'C' (the class creation code) is not consistent across all three cases. It could be considered incorrect in all cases as it does not correspond only to the class definition source lines. ---------- components: Library (Lib) messages: 226537 nosy: isedev priority: normal severity: normal status: open title: inconsistent results with inspect.getsource() / inspect.getsourcelines() type: behavior versions: Python 3.3 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue22355> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com