Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 58

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

ΠšΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ свои Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹:

>>> 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() (это Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°).