2016-09-01 3 views
1

/mypath/test.pyPython sys._getframe

import sys 

def test(): 
    frame = sys._getframe(0) 
    f = frame.f_code.co_filename 
    print('f:', f) 
    print('co_filename1:', frame.f_code.co_filename) 
    while frame.f_code.co_filename == f: 
     frame = frame.f_back 
    print('co_filename2:', frame.f_code.co_filename) 

test() 

laufen sie und bekommen:

f: /mypath/test.py 
co_filename1: /mypath/test.py 
Traceback (most recent call last): 
    File "/mypath/test.py", line 13, in <module> 
    test() 
    File "/mypath/test.py", line 9, in test 
    while frame.f_code.co_filename == f: 
AttributeError: 'NoneType' object has no attribute 'f_code' 

Warum in while-Schleife ein NoneType Fehler frame.f_code erhalten, aber wie gewohnt ausdrucken Dank ~

+0

Codierungsfehler. Wenn sich * alle * Stapelrahmen in der aktuellen Datei befinden (z. B. wenn Sie die Datei direkt ausführen), fällt die Schleife über den Rahmen des Bildstapels. An diesem Punkt "frame == None". – dhke

Antwort

0

Immer wenn Sie frame = frame.f_back ausführen, gehen Sie zurück zum vorherigen Coderahmen. Wenn Sie sich jedoch im obersten Frame befinden, enthält das Attribut f_back Keiner (wie in "es gibt keinen vorherigen Frame") - also sollten Sie die while-Schleife an diesem Punkt einfach abbrechen. Fügen Sie einfach eine zusätzliche Bedingung hinzu, zum Beispiel:

while frame and frame.f_code.co_filename == f: 
     frame = frame.f_back 
Verwandte Themen