When you want to log something, C pre-processor macros __FUNCTION__
and __LINE__ are quite helpful (althogh the first is a GNU extension
for GCC, AFAIK). Python have the __name__ pseudo-variable with the
current namespace, but isn’t quite helpful when you want to find where things
are going. Fortunately, you can “emulate” __FUNCTION__ and
__LINE__ in Python, using the inspect module.
def __line__ (): caller = inspect.stack()[1] return int (caller[2])def __function__ (): caller = inspect.stack()[1] return caller[3]
我的測試代碼
import inspectdef all():caller = inspect.stack()print len(caller)print caller[0]print caller[1]print caller[2]def main():all()if __name__=='__main__':main()
輸出
> "D:\Python25\python.exe" "C:\Documents and Settings\xingming.xuxm\My Documents\Untitled 2.py" 3(<frame object at 0x00CBA368>, 'C:\\Documents and Settings\\xingming.xuxm\\My Documents\\Untitled 2.py', 6, 'all', ['\tcaller = inspect.stack()\n'], 0)(<frame object at 0x00CBBA38>, 'C:\\Documents and Settings\\xingming.xuxm\\My Documents\\Untitled 2.py', 13, 'main', ['\tall()\n'], 0)(<frame object at 0x00CAD8B0>, 'C:\\Documents and Settings\\xingming.xuxm\\My Documents\\Untitled 2.py', 16, '<module>', ['\tmain()'], 0)