ΠΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π°ΡΡΠΈΠ±ΡΡΡ:
>>> co.co_code # Π±Π°ΠΉΡ-ΠΊΠΎΠ΄
't\x00\x00|\x00\x00\x17|\x01\x00\x17Sd\x01\x00S'
>>> co.co_argcount # ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
2
>>> co.co_varnames # ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
('x', 'y')
>>> co.co_consts # ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
(None,)
>>> co.co_names # Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°
('t', 'x', 'y')
>>> co.co_name # ΠΈΠΌΡ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ - ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ)
'f'
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΠ»Π΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ inspect.
ΠΠΎΠ΄ΡΠ»Ρ inspect
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ inspect β Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ , ΠΊΠ»Π°ΡΡΠ°Ρ , ΡΡΠ½ΠΊΡΠΈΡΡ , ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ , ΡΡΠ΅ΠΉΠΌΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ . ΠΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ inspect ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π³Π»ΡΠ½ΡΡΡ Β«Π½Π° ΠΊΡΡ Π½ΡΒ» ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python.
ΠΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
Π€ΡΠ½ΠΊΡΠΈΡ ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ inspect.isbuiltin ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ inspect.isclass ΠΠ»Π°ΡΡ inspect.iscode ΠΠΎΠ΄ inspect.isdatadescriptor ΠΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π΄Π°Π½Π½ΡΡ inspect.isframe Π€ΡΠ΅ΠΉΠΌ inspect.isfunction Π€ΡΠ½ΠΊΡΠΈΡ inspect.ismethod ΠΠ΅ΡΠΎΠ΄ inspect.ismethoddescriptor ΠΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° inspect.ismodule ΠΠΎΠ΄ΡΠ»Ρ inspect.isroutine Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ inspect.istraceback Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΡΠΈΠΌΠ΅Ρ:
>>> import inspect
>>> inspect.isbuiltin(len)
True
>>> inspect.isroutine(lambda x: x+1)
True
>>> inspect.ismethod(''.split)
False
>>> inspect.isroutine(''.split)
True
>>> inspect.isbuiltin(''.split)
True
ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² PythonβΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈΠΌΠ΅ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΠΎΠ±ΡΠ΅ΠΊΡβΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
>>> import inspect
>>> inspect.ismodule(inspect)
True
>>> inspect.getmoduleinfo('/usr/local/lib/python2.3/inspect.pyc')
('inspect', '.pyc', 'rb', 2)
>>> inspect.getmodulename('/usr/local/lib/python2.3/inspect.pyc')
'inspect'
>>> inspect.__name__
'inspect'
>>> inspect.__dict__
...
>>> inspect.__doc__
...Get useful information from live Python objects.\n\nThis module encapsulates
....
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²:
>>> import inspect
>>> inspect.getsourcefile(inspect) # ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
'/usr/local/lib/python2.3/inspect.py'
>>> inspect.getabsfile(inspect) # Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ
'/usr/local/lib/python2.3/inspect.py'
>>> print inspect.getfile(inspect) # ΡΠ°ΠΉΠ» ΠΊΠΎΠ΄Π° ΠΌΠΎΠ΄ΡΠ»Ρ
/usr/local/lib/python2.3/inspect.pyc
>>> print inspect.getsource(inspect) # ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ (Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ)
# -*- coding: isoβ8859β1 -*- ""...Get useful information from live Python objects.
...
>>> import smtplib
>>> # ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
>>> inspect.getcomments(smtplib.SMTPException)
'# Exception classes used by this module.\n'
>>> # Π’Π΅ΠΏΠ΅ΡΡ Π±Π΅ΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
>>> inspect.getdoc(smtplib.SMTPException)
'Base class for all exceptions raised by this module.'
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ inspect ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΡΠΎΡΡΠ°Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ inspect.getargspec():
>>> import inspect
>>> def f(x, y=1, z=2):
... return x + y + z
...
>>> def g(x, *v, **z):
... return x
...
>>> print inspect.getargspec(f)
(['x', 'y', 'z'], None, None, (1, 2))
>>> print inspect.getargspec(g)
(['x'], 'v', 'z', None)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΡΡΠ΅ΠΆ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (ΠΊΡΠΎΠΌΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ), Π·Π°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (*) ΠΈ ΡΠΏΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (**), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ β ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡβΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ, ΠΎΡΡΠ°ΠΆΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²:
>>> def f((x1,y1), (x2,y2)):
... return 1
...
>>> print inspect.getargspec(f)
([['x1', 'y1'], ['x2', 'y2']], None, None, None)
ΠΠ»Π°ΡΡΡ (ΠΊΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅) β ΡΠΎΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈ ΠΎ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΅βΡΡΠΎ ΡΠ·Π½Π°ΡΡ:
>>> import smtplib
>>> s = smtplib.SMTP
>>> s.__module__ # ΠΌΠΎΠ΄ΡΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡ
'smtplib'
>>> inspect.getmodule(s) # ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
<module 'smtplib' from '/usr/local/lib/python2.3/smtplib.pyc'>
ΠΠ»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΡΠ΅Π²Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΡΠ½ΠΊΡΠΈΡ inspect.getclasstree(). ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅βΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²βΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ:
import inspect, exceptions
def formattree(tree, level=0):
"""ΠΡΠ²ΠΎΠ΄ Π΄Π΅ΡΠ΅Π²Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ.
tree β Π΄Π΅ΡΠ΅Π²ΠΎ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ inspect.getclasstree(),
ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ.
Π ΠΊΠΎΡΡΠ΅ΠΆΠ΅ entry ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β ΠΊΠ»Π°ΡΡ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΊΠΎΡΡΠ΅ΠΆ Ρ Π΅Π³ΠΎ
Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ. ΠΠ½Π°ΡΠ΅ entry β Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ.
level β ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΡΡΡΡΠΏΠΎΠ²
"""
for entry in tree:
if type(entry) is type(()):
c, bases = entry
print level * " ", c.__name__, \
"(" + ", ".join([b.__name__ for b in bases]) + ")"
elif type(entry) is type([]):
formattree(entry, level+1)
v = exceptions.__dict__.values()
exc_list = [e for e in v
if inspect.isclass(e) and issubclass(e, Exception)]
formattree(inspect.getclasstree(exc_list))
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ inspect.currentframe() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠ΅ΠΉΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΡΠΈΠ±ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎΡΡ Π² ΡΠΎΡΠΊΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ) Π½Π° ΡΡΠ΅ΠΊ ΠΊΠ»Π°Π΄Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠΎΠΌΡ ΡΡΠ΅ΠΉΠΌΡ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°. ΠΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ΅ΠΉΠΌ, Ρ ΡΠ°Π½ΠΈΠ²ΡΠΈΠΉΡΡ Π² ΡΡΠ΅ΠΊΠ΅. Π€ΡΠ΅ΠΉΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°: ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π°ΡΡΠΈΠ±ΡΡΡ ΡΡΠ΅ΠΉΠΌΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
import inspect
def f():
fr = inspect.currentframe()
for a in dir(fr):
if a[:2] != "__":
print a, ":", str(getattr(fr, a))[:70]
f()
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ
f_back : <frame object at 0x812383c>
f_builtins : {'help': Type help() for interactive help, or help(object) for help ab
f_code : <code object f at 0x401d83a0, file "<stdin>", line 11>
f_exc_traceback : None
f_exc_type : None
f_exc_value : None
f_globals : {'f': <function f at 0x401e0454>, '__builtins__': <module '__builtin__
f_lasti : 68
f_lineno : 16
f_locals : {'a': 'f_locals', 'fr': <frame object at 0x813c34c>}
f_restricted : 0
f_trace : None
ΠΠ΄Π΅ΡΡ f_back β ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΡΠ΅ΠΉΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ Π΄Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌ), f_builtins β ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ°, f_globals β ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, f_locals β ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½, f_code β ΠΊΠΎΠ΄ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ f()), f_lasti β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ²ΡΠ΅ΠΉΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, f_trace β ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ° (ΠΈΠ»ΠΈ None), f_lineno β ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, f_restricted β ΠΏΡΠΈΠ·Π½Π°ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ΅ΠΊΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ inspect.stack(). ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
(ΡΡΠ΅ΠΉΠΌβΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π°, ΡΡΡΠΎΠΊΠ°_Π²_ΡΠ°ΠΉΠ»Π΅, ΠΈΠΌΡ_ΡΡΠ½ΠΊΡΠΈΠΈ,
ΡΠΏΠΈΡΠΎΠΊ_ΡΡΡΠΎΠΊ_ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ_ΠΊΠΎΠ΄Π°, Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ_Π²_ΠΊΠΎΠ΄Π΅)
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ·ΡΠΊΠ° Python: Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ β traceback.
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΠΌΠ΅ΡΡΠ° Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎ ΠΌΠ΅ΡΡΠ° Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. Π ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ sys.exc_info() (ΡΡΠΎ ΡΡΠ΅ΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΊΠΎΡΡΠ΅ΠΆΠ°).