Geçerli işlev olarak adlandırılan işlevi bulmanın bir yolu var mı? Örneğin, örneğin:Üst işlevi alma
Herhangi bir fikir?
Geçerli işlev olarak adlandırılan işlevi bulmanın bir yolu var mı? Örneğin, örneğin:Üst işlevi alma
Herhangi bir fikir?
import inspect
def first():
return second()
def second():
return inspect.getouterframes(inspect.currentframe())[1]
first()[3] # 'first'
Geri tepme modülünün extract_stack işlevini kullanabilirsiniz.
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
Bu, başka bir modülü almak istemediğinizde en az nerede-ben-I hata ayıklama yardımcılarını hızla eklemek için iyi çalışır. (CPython sadece sadece hata ayıklama için.)
def LINE(back = 0):
return sys._getframe(back + 1).f_lineno
def FILE(back = 0):
return sys._getframe(back + 1).f_code.co_filename
def FUNC(back = 0):
return sys._getframe(back + 1).f_code.co_name
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
Örnek:
import sys, os # these you almost always have...
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
def first():
second()
def second():
print WHERE()
print WHERE(1)
first()
Çıktı:
$ python fs.py
fs.py/12 second()
fs.py/9 first()
@MikeG .: üretim açıklamasında bu bilgi, evet kötü istemek. Büyük bir Python parçasını ayıklamak ve anlamak için kullanmak gayet iyi, IMHO. –