Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ:
β’ tb_frame Π€ΡΠ΅ΠΉΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
β’ tb_lineno ΠΈ tb_lasti ΠΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π³Π΄Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
β’ tb_next Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΠ΅ΠΊΠ° (Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ).
ΠΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ traceback β Β«ΠΌΡΠ³ΠΊΠ°ΡΒ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (Π² Π»ΠΎΠ³, Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Ρ.ΠΏ.):
#!/usr/bin/python
def dbg_except():
"""Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² tryβexcept"""
import traceback, sys, string
print sys.exc_info()
print " ".join(traceback.format_exception(*sys.exc_info()))
def bad_func2():
raise StandardError
def bad_func():
bad_func2()
try:
bad_func()
except:
dbg_except()
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
(<class exceptions.StandardError at 0x4019729c>,
<exceptions.StandardError instance at 0x401df2cc>,
<traceback object at 0x401dcb1c>)
Traceback (most recent call last):
File "pr143.py", line 17, in ?
bad_func()
File "pr143.py", line 14, in bad_func
bad_func2()
File "pr143.py", line 11, in bad_func2
raise StandardError
StandardError
Π€ΡΠ½ΠΊΡΠΈΡ sys.exc_info() Π΄Π°Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΆ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½Π½ΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ (ΠΊΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ). ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ traceback.format_exception(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π² ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ ΡΠΎΡΠΌΠ΅. ΠΠΎΠ΄ΡΠ»Ρ traceback ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΎ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ inspect ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ Π² Python, Π° Π»ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ ΡΠ΄Π°Π΅ΡΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π·Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ° Python: Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΠ°ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°.
ΠΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌ, Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΎ Π΄Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠ° Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, Π½Π° ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° Python ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. ΠΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ β ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΠ±ΠΎΠΉ PythonβΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.