Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° python ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ
Python Traceback β ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅
Python Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ (Π΄Π°Π»Π΅Π΅ traceback), ΠΊΠΎΠ³Π΄Π° Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡΠ²ΠΎΠ΄ traceback ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ³Π°ΡΡΠΈΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π΅Π³ΠΎ Π²ΠΏΠ΅ΡΠ²ΡΠ΅, ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΠ΅Π³ΠΎ ΠΎΡ Π²Π°Ρ Ρ ΠΎΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ traceback Python ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ traceback Python ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠ°ΡΡ Π»ΡΡΡΠΈΠΌ Python ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ.
Π ΠΊΠΎΠ½ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅:
Python Traceback β ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ?
Traceback (ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°) β ΡΡΠΎ ΠΎΡΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ·ΠΎΠ²Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ.
ΠΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ Python?
ΠΠ° Π½Π°ΡΠ΅ΠΌ ΡΠΎΡΡΠΌΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ ΠΎΡ Π²ΡΠ΅Π³ΠΎ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°!
Telegram Π§Π°Ρ & ΠΠ°Π½Π°Π»
ΠΡΡΡΠΏΠΈΡΠ΅ Π² Π½Π°Ρ Π΄ΡΡΠΆΠ½ΡΠΉ ΡΠ°Ρ ΠΏΠΎ Python ΠΈ Π½Π°ΡΠ½ΠΈΡΠ΅ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅Π΄ΠΈΠ½ΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ! Π‘ΡΠ°Π½ΡΡΠ΅ ΡΠ°ΡΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°!
ΠΠ°Π±Π»ΠΈΠΊ VK
ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ² ΠΏΠΎ Python Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ ΠΠ. ΠΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊΠΈ ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π²Π°Ρ!
Traceback Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΡΠΊΠ°, ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ βΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°β.
ΠΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Python Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠΈΠΆΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Python. ΠΡΠ»ΠΈ ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΠΎ, ΠΈΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠ²Π΅ΠΆΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ΠΉ: ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π² Python
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ:
ΠΡΠ° Π²ΡΠ΄Π°ΡΠ° ΠΈΠ· traceback ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· traceback ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠΎΠ΄, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
Python Traceback β ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ Π² ΡΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠ°?
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Python ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ traceback, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉΡΡ Π² traceback.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΎΠ±Π·ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² Python 3
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Python, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΡΠΌΠΈ. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π½ΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ΅ΠΉ:
Π Python Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ½ΠΈΠ·Ρ Π²Π²Π΅ΡΡ .
ΠΡΡΡ ΡΡΠ΄ ΠΎΡΠ»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π° Π² REPL. ΠΠΈΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² REPL ΠΈ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
trace β Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PythonΒΆ
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄: Lib/trace.py
ΠΠΎΠ΄ΡΠ»Ρ trace ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΌ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΠΈΡΠΊΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
Coverage.py ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΡΡΡΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ HTML Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠΈΠ»ΠΈΠ°Π»ΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈΒΆ
ΠΠΎΠ΄ΡΠ»Ρ trace ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ, ΠΊΠ°ΠΊ:
ΠΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ somefile.py ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Python, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
ΠΡΠΎΡΠΌΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΡ ΠΎΠ΄.
ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ Π²ΡΠΉΠ΄ΠΈΡΠ΅ ΠΈΠ· Π½Π΅Π³ΠΎ.
ΠΠ»Π°Π²Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡΒΆ
ΠΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π΅ΠΉ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΒΆ
ΠΡΠ΅ΡΠΈΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
Π€ΠΈΠ»ΡΡΡΡΒΆ
ΠΡΠΈ ΠΎΠΏΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.
ΠΠ³Π½ΠΎΡΠΈΡΡΠΉΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΡ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ). ΠΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΡΠΎΠΉ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΒΆ
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΠΎΠ±Π΅ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π°Ρ . ΠΡΠ»ΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, globals ΠΈ locals ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΡΡΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΠΈ.
ΠΡΠ·ΠΎΠ² func Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Trace Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
class trace. CoverageResults ΒΆ
write_results ( show_missing=True, summary=False, coverdir=None ) ΒΆ
ΠΠ°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΊΡΡΡΠΈΡ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° show_missing Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° summary Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠΊΡΡΡΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. coverdir ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ°ΠΉΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΊΡΡΡΠΈΡ. ΠΡΠΈ None ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Π΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°:
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Python GIL
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ΅ΠΉ, ΠΎΠ±ΡΡΡΠ½ΡΡΡΠΈΡ , Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ Python GIL (The Global Interpreter Lock) (Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ CPython). ΠΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅, ΡΠΎ GIL Π½Π΅ Π΄Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌΡ ΡΠΈΡΡΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π° Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ Π² Vaex ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°Π΄Π°Ρ Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΠΌΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ Π½Π° Π‘++ Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ GIL. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΄Π»Ρ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ PythonβΠ±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π² ΠΊΠΎΡΠΎΡΡΡ Python Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΎΠ»ΠΈ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡΡΡΠ΅Π³ΠΎ Π·Π²Π΅Π½Π°.
GIL Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΡΠ²Π½ΠΎ, ΠΈ ΡΡΠΎ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π±ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ ΡΠ°ΠΌ ΠΏΠΎΠ±ΡΠ²Π°Π» Π² ΡΠΎΠ»ΠΈ Π·Π°Π±ΡΠ²ΡΠ΅Π³ΠΎ, ΠΈ Π½Π°ΡΡΠ» ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Apache Arrow (ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Vaex, ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° GIL Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Arrow, ΠΌΡ (ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅) ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ).
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π° 64 ΡΠ΄ΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Vaex ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°Π»Π΅ΠΊΠ° ΠΎΡ ΠΈΠ΄Π΅Π°Π»Π°. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ 4000 % ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π²ΠΌΠ΅ΡΡΠΎ 6400 %, ΡΡΠΎ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠ³Π°Π΄ Π²ΡΡΠ°Π²Π»ΡΡΡ Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°, Ρ Ρ ΠΎΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ, ΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² GIL, ΡΠΎ Ρ ΠΎΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠΎΡΠΌΠΎΠ·ΠΈΡ Vaex.
ΠΠΎΡΠ΅ΠΌΡ Ρ ΡΡΠΎ ΠΏΠΈΡΡ
Π― ΠΏΠ»Π°Π½ΠΈΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ, ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ°Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Python Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Python ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ ΠΈ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ GIL.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ, ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ·ΡΠΊΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅ΠΉ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Python.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
Linux
ΠΠ°ΠΌ Π½ΡΠΆΠ΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΊ Linux-ΠΌΠ°ΡΠΈΠ½Π΅ Ρ root-ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌΠΈ (sudo Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ). ΠΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΡΠΈΡΠ΅ ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π»Ρ Π²Π°Ρ Π½ΠΈΠΆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ perf, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π° Ubuntu ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΄ΡΠ°
ΠΠ°ΠΏΡΡΠΊ Π² ΡΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
ΠΠ°ΠΊΠ΅ΡΡ Python
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ VizTracer ΠΈ per4m
ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ perf
Π Python Π½Π΅Π»ΡΠ·Ρ Π²ΡΡΡΠ½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ GIL (ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π»ΠΈΠ½Π³Π°), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅Ρ API. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ· ΡΠ΄ΡΠ°, ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ perf.
Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ (ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊ perf_events) ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΡΠΏΠ°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ . Perf ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠ³Π°ΡΡΠ΅, Π½ΠΎ ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΡΠΌ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ ΠΠΆΡΠ»ΠΈΠΈ ΠΠ²Π°Π½Ρ ΠΈΠ»ΠΈ ΡΠ°ΠΉΡ ΠΡΠ΅Π½Π΄Π°Π½Π° ΠΡΠ΅Π³Π³Π°.
Π§ΡΠΎΠ±Ρ Π½Π°ΡΡΡΠΎΠΈΡΡΡΡ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ perf ΠΊ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅:
ΠΡ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π·Π°ΡΡΠΌΠ»ΡΠ½Π½ΠΎΡΡΡ (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ (wildcards)):
Π ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠ²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ perf Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π°.
ΠΠ·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ²ΡΡΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ (Π²ΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ): ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΡΠ½ΡΠ»Π° (ΠΏΡΠΎΡΠ»Π° ΠΎΠ΄Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Π°). ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π²Ρ ΠΎΠ΄ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ½Π°:
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΄ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Python Π½Π° S (=sleeping).
Π‘Π΅ΠΊΡΠ½Π΄Ρ ΡΠΏΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ±ΡΠ΄ΠΈΠ»Π°ΡΡ:
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. ΠΠ°, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΎΡΠΏΠ°ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ per4m, Π½ΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ, Ρ ΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ VizTracer Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
VizTracer
ΠΡΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊ Python, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅:
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ°:
Π’Π°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ HTML:
ΠΠΎΡ ΠΎΠΆΠ΅, some_computation ΠΈΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ (Π΄Π²Π°ΠΆΠ΄Ρ), Ρ ΠΎΡΡ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ GIL ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ. Π§ΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ VizTracer ΠΈ perf
ΠΠ°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ per4m ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΠ° perf Π² JSON, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ VizTracer:
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ VizTracer ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠΌ Π΄Π²Π° JSON-ΡΠ°ΠΉΠ»Π°:
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Π·Π°ΡΡΠΏΠ°ΡΡ ΠΈΠ·-Π·Π° GIL ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π΄Π»ΠΈΠ½Π° ΡΠ°Π·Ρ ΡΠ½Π° ΠΎΠΊΠΎΠ»ΠΎ 5 ΠΌΡ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ sys.getswitchinterval
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ GIL
ΠΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΡΡΠΏΠ°Π΅Ρ, Π½ΠΎ ΠΌΡ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ ΡΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ time.sleep ΠΈΠ»ΠΈ GIL. ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π° ΠΈΠ· Π½ΠΈΡ .
Π§Π΅ΡΠ΅Π· ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ°
ΠΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅ΠΊΠ° Python, Π° Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Ρ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ _PyEval_EvalFrameDefault ΠΈ ΠΏΡΠΎΡΠ΅Π΅. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ Ρ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ°.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ per4m perf2trace ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΎ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΠ³Π΄Π° Π² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ take_gil :
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠΎΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌ, Π³Π΄Π΅ GIL ΠΈΠ³ΡΠ°Π΅Ρ ΡΠΎΠ»Ρ!
Π§Π΅ΡΠ΅Π· Π·ΠΎΠ½Π΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (kprobes/uprobes)
ΠΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΆΠ°Π»ΠΎΠ±Ρ, Π° ΠΈΠ·-Π·Π° ΠΈΠ½Π»Π°ΠΉΠ½Π΅Π½Π½ΡΡ drop_gil ΠΈ take_gil Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·ΠΎΠ½Π΄ΠΎΠ²/ΡΠΎΠ±ΡΡΠΈΠΉ (ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·), Π½ΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ, ΡΡΠΎ ΠΌΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Python (ΠΎΡ conda-forge) ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ take_gil / drop_gil (ΠΈ ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ), ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·ΠΎΠ½Π΄Ρ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Β«Π°ΠΊΡΠΈΠ²Π½ΡΒ» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠΌ ΠΈΠ· perf), ΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠΊΠ΅. ΠΡΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π΅ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ Π·Π°ΡΡΠΎΠ½ΡΡΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π° Π² Π½ΡΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° Π²ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ (INT3 Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² x86). ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄Π»Ρ perf Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ±ΡΠ°ΡΡ Π·ΠΎΠ½Π΄Ρ, ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ per4m perf2trace ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π² JSON, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ½ΡΡΠ΅Π½ Π΄Π»Ρ VizTracer, ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΎΠ²ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ.
ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° per4m perf2trace gil ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΄Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° gil_load. ΠΠ· Π½Π΅Π³ΠΎ ΠΌΡ ΡΠ·Π½Π°ΡΠΌ, ΡΡΠΎ ΠΎΠ±Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΆΠ΄ΡΡ GIL ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π° perf.data, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ perf, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ Π±Π΅Π· ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΡΡΠ΅ΠΊΠ°, ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Π·Π°ΡΠ½ΡΠ» Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ·-Π·Π° GIL ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΎΠ±Π΅ΡΡΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ΅ ΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°:
VizTracer Π΄Π°ΡΡ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, Ρ ΠΊΠΎΠ³ΠΎ Π±ΡΠ» GIL ΠΈ ΠΊΡΠΎ Π΅Π³ΠΎ ΠΆΠ΄Π°Π»:
ΠΠ°Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΆΠ΄ΡΡ GIL ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠΎΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ (ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΊΠ°ΠΊ LOCK). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΡΠΏΠΈΡ (Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ!). Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ·-Π·Π° GIL.
ΠΡΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΡΠ°ΠΊΠ΅Π½Π°β¦ Π³Ρ ΠΌ, GIL
ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΈΡΡΠΎΠΌ Python GIL ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°Π·ΡΠ΅ΡΠ°Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ (Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Python, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ (ΡΡΠ±)ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°). Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ GIL, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ NumPy.
Π₯ΠΎΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ Π½Π° Python (Π΄Π»Ρ Π½Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΡΠ½ GIL, ΡΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎΠΌ LOCK), ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΈΡΡΡΠΌ Python Ρ Π½Π°Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ. Π Π·Π΄Π΅ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎ ΡΡΠ°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ NumPy, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² C/C++/Fortran, ΠΎΡΠΊΠ»ΡΡΠΈΠ»ΠΈ GIL.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Jupyter
ΠΡΠΊΡΡΡΡ giltracer.html Π² Π½ΠΎΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ (ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ²ΡΠ·ΠΈ Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ)
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π Π°Π±ΠΎΡΡ Π½Π°ΠΌ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ per4m, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΠΉ ΡΠΊΡΠΈΠΏΡ perf Π² JSON-ΡΠΎΡΠΌΠ°Ρ VizTracer, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ.
ΠΠ½ΠΎΠ³ΠΎ Π±ΡΠΊΠ°Ρ, Π½Π΅ ΠΎΡΠΈΠ»ΠΈΠ»
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π²Π»ΠΈΡΠ½ΠΈΠ΅ GIL, ΡΠΎ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎ:
ΠΠ»Π°Π½Ρ Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅
Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΌΠ½Π΅, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²Π΄ΠΎΡ Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ², ΡΠ΅ΠΌ ΠΌΠΎΠΈ. Π― Ρ ΠΎΡΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ»Π°Π½Ρ Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅:
Traceback Π² Python
Python ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ (traceback) ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π΅Π΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΠ»ΠΈ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ Π² ΠΎΠ½Π° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ. ΠΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π ΠΊΠΎΠ½ΡΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅:
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Traceback Π² Python?
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° (Traceback) β ΡΡΠΎ ΠΎΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΏΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ stack trace (ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ°), stack traceback (ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ°), backtrace (ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ) ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΡΡΠ³ΠΈΠ΅. Π Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ traceback.
ΠΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Python ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΠΉ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ:
ΠΠ΄Π΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ greet() Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ someone. ΠΠ΄Π½Π°ΠΊΠΎ Π² greet() ΡΡΠΎ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ someon Π² Π²ΡΠ·ΠΎΠ²Π΅ print().
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Python. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠ²Π΅ΠΆΠΈΡΡΡΡ, ΡΠΎ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΠΈΡΠ°ΡΡ Python Exceptions: ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ traceback:
ΠΡΠΎΡ Π²ΡΠ²ΠΎΠ΄ traceback ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ° Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π²Π°ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ± ΡΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ. ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²Π΅Π» ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ traceback ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ» NameError, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΈΠΌΡ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠ»Π°ΡΡ), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΈΠΌΡ β someon.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΠΈΡΠΊ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ someon, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΡΠΊΠ°ΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΡΡΠΎ Π²Π°Ρ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠ°ΠΊ ΡΠΈΡΠ°ΡΡ Traceback?
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² Π½ΠΈΡ .
ΠΠ±Π·ΠΎΡ Traceback
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ Π²Π°ΠΆΠ½Ρ. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π½ΠΈΠΆΠ΅ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΡΡΠΈ ΡΠ°ΡΡΠΈ:
Π Python Π»ΡΡΡΠ΅ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ½ΠΈΠ·Ρ Π²Π²Π΅ΡΡ :
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π² REPL. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π² REPL, ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅ΠΊΠ° Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π² Python. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΡ Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΠ΄ΡΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ β Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΡΠΎΡΠΌΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΠΈ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π΄Π»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°:
ΠΠ΄Π΅ΡΡ who_to_greet() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ person ΠΈ Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΡΠ΅ΠΌ greet() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ, someone, ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ greeting ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ print(). who_to_greet() ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ someone.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, greet_many() Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ people ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ greet(). ΠΡΠ»ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ greet() Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅.
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄.
ΠΡΠ»ΠΈ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π²ΡΠ·ΠΎΠ² greet() Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π° greetings.py ΠΈ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, greet(βChadβ, greting = βYoβ)), ΡΠΎ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
ΠΡΠ΅ ΡΠ°Π·, Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Python, Π»ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π΄Π²ΠΈΠ³Π°ΡΡΡ Π²Π²Π΅ΡΡ ΠΏΠΎ Π²ΡΠ²ΠΎΠ΄Ρ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ TypeError. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡ Π·Π° ΡΠΈΠΏΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΡΠ΅ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ, Π΄Π°ΡΡ Π²Π°ΠΌ Π²Π°ΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, ΡΡΠΎ greet() Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π». ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°Π½ΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: greting.
ΠΠ²ΠΈΠ³Π°ΡΡΡ Π²Π²Π΅ΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π²ΡΠ·ΠΎΠ² greet(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ greetings.py.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄, Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΊΠΎΠ΄, ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Python ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΠΈΠ΄ΠΈΠΌ Π·Π΄Π΅ΡΡ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π‘ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ»Π΅Π΄ΡΠ΅ΡΠ΅ Π΄Π°Π»ΡΡΠ΅, ΡΠ΄Π°Π»ΠΈΡΠ΅ Π³Π»ΡΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² greet() ΠΈΠ· Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΠ°ΡΡΠΈ greetings.py ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» example.py ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
Π ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π²Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΠ΅ Π²Π°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, greetings.py, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ· Π½Π΅Π³ΠΎ greet(). ΠΠΎΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ example.py:
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠΌ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠ½ΠΎΠ²Π° ΡΠ²Π»ΡΠ΅ΡΡΡ TypeError, Π½ΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. ΠΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, ΡΡΠΎ Π³Π΄Π΅-ΡΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ, Π½ΠΎ Π±ΡΠ»ΠΎ Π΄Π°Π½ΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
ΠΠ²ΠΈΠ³Π°ΡΡΡ Π²Π²Π΅ΡΡ , Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°. ΠΠ°ΡΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π²ΠΌΠ΅ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ, greet().
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°, ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² greet() ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°.
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π ΡΡΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Python Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ, ΡΠ½ΠΎΠ²Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ±ΠΈΡΡ Ρ ΡΠΎΠ»ΠΊΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΠ·ΠΎΠ² greet_many() Π² ΠΊΠΎΠ½Π΅Ρ greetings.py:
ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΌ Π»ΡΠ΄ΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ, During handlingβ¦ Π² Π΄Π°Π½Π½ΡΡ Π²ΡΡΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ, ΠΏΠΎΠΊΠ° Π²Π°Ρ ΠΊΠΎΠ΄ ΠΏΡΡΠ°Π»ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Python 3. Π Python 2 Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π½ΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π»ΠΈ greet() Ρ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ 1 ΠΊ ΡΠΏΠΈΡΠΊΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π»ΡΠ΄Π΅ΠΉ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ greet_many() ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² greet() Π² Π±Π»ΠΎΠΊ try ΠΈ except. ΠΠ° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ greet() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ³Π΄Π° greet_many() Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠ΅ ΡΠ°Π· ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ°ΡΡΡ greetings.py:
ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° greet() ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ TypeError ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, greet_many() ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅. ΠΠ΄Π΅ΡΡ ΠΊΠΎΠ΄ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅Π³ΠΎ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΈ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
ΠΡΠΎΡΠΌΠΎΡΡ Π²ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ½ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ, ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π°Π΅Ρ Π»ΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅.
ΠΠ°ΠΊΠΎΠ²Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² Python?
ΠΠ½Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Python, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΡΠ΅, Π½ΠΎ Π·Π½Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ.
AttributeError
AttributeError Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ ΡΠ±ΠΎΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π°ΡΡΠΈΠ±ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ AttributeError:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π»Ρ AttributeError Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, int Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ an_attribute. ΠΠΈΠ΄Ρ AttributeError Π² ΡΡΡΠΎΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ Π°ΡΡΠΈΠ±ΡΡΡ Π²Ρ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΈ Π³Π΄Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ:
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ a_list Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ list, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ .append(). ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ AttributeError ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ Π²ΡΠ·Π²Π°ΡΡ .append(), ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π§Π°ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΈΠ· Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° None. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄: AttributeError: βNoneTypeβ object has no attribute βappendβ.
ImportError
ΠΡΠΈΠ±ΠΊΠ° ImportError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈΠΌΠΏΠΎΡΡΠ°. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ModuleNotFoundError, Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ. Π’Π°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ from β¦ import ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ImportError ΠΈ ModuleNotFoundError:
IndexError
ΠΡΠΈΠ±ΠΊΠ° IndexError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΊΠΎΡΡΠ΅ΠΆ, Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² ΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ IndexError:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π»Ρ IndexError Π½Π΅ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²ΡΡ ΠΎΠ΄ΡΡΠ°Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΈ ΡΠΈΠΏ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ β ΡΠΏΠΈΡΠΎΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΡΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π±ΡΡΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
KeyError
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ IndexError, KeyError Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Ρ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ dict. ΠΡΠΌΠ°ΠΉΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ± IndexError, Π½ΠΎ Π΄Π»Ρ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡΡ Π½Π°Π±ΠΎΡΠ° (ΡΠ»ΠΎΠ²Π°ΡΡ) Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² Π½Π°Π±ΠΎΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ KeyError:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π»Ρ KeyError ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°ΠΌ ΠΊΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½. ΠΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ KeyError, Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° Python KeyError Exceptions and How to Handle Them..
NameError
ΠΡΠΈΠ±ΠΊΠ° NameError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΡΡΠ»Π°Π΅ΡΠ΅ΡΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠ»Π°ΡΡ, ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅ greet() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ person. ΠΠΎ Π² ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π±ΡΠ» ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ persn:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ NameError Π΄Π°Π΅Ρ Π²Π°ΠΌ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
NameError ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ:
SyntaxError
ΠΡΠΈΠ±ΠΊΠ° SyntaxError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Python.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΈΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π Python REPL ΡΡΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Enter:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ SyntaxError ΡΠΎΠ»ΡΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, ΡΡΠΎ Π±ΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ Π² ΠΊΠΎΠ΄Π΅. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π²ΡΡΠ΅ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΡΡΡΠΎΠΊΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ^ (ΠΊΠ°ΡΠ΅ΡΠΊΡ), ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. ΠΠ΄Π΅ΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ def ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ SyntaxError ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° SyntaxError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Python ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄, Π° ΡΡΡΠΎΠΊΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
TypeError
ΠΡΠΈΠ±ΠΊΠ° TypeError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΊΠΎΠ΄ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΊ ΡΠ΅Π»ΠΎΠΌΡ ΡΠΈΡΠ»Ρ ΠΈΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ len() Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ TypeError:
ΠΡΠ΅ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π° TypeError ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΡΡΠΎΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΡΠ°ΡΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π²ΠΌΠ΅ΡΡΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ:
Π‘ΡΡΠΎΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠ·Π²Π°ΡΡ len() Π΄Π»Ρ int. Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ int.
ValueError
ΠΡΠΈΠ±ΠΊΠ° ValueError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅Π²Π΅ΡΠ½ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ± IndexError, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° ΡΠΎΠ»ΡΠΊΠΎ ValueError Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ, Π½ΠΎ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ IndexError. (ΠΡΡΠΎΡΠ½ΠΈΠΊ)
ΠΠΎΡ Π΄Π²Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ValueError:
Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ValueError Π² ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, Π² ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ:
ΠΠ°ΠΊ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ?
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΡΡΠΈΠΌ Π΄Π΅Π»Π°ΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° β ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π²Π²ΠΎΠ΄Π΅. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π·Π°ΠΌΠΎΠ»ΡΠ°ΡΡ ΠΈΠ»ΠΈ ΡΠΊΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈ Π΄Π΅Π»Π°Ρ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅.
ΠΡΠΎΡ ΠΊΠΎΠ΄ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ, Π·Π°Π΄Π°Π² Π΅ΠΌΡ URL-Π°Π΄ΡΠ΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΎΠ½ Π²ΡΠ·ΠΎΠ²Π΅Ρ URL-Π°Π΄ΡΠ΅Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ°. ΠΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΡΠ²Π΅Ρ Π±ΡΠ» ΡΡΠ°ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ HTTP:
ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° URL-Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Ρ ΠΎΡΡ-ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ConnectionError ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ:
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Python Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ConnectionError Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΌΠΈΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΡ Π²Π²Π΅ΡΡ ΠΏΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π°ΡΠ°Π»Π°ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΡΠΎ ΡΡΡΠΎΠΊΠΈ 5 urlcaller.py.
Π’Π΅ΠΏΠ΅ΡΡ Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ±Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ 5 Π² Π±Π»ΠΎΠΊ try ΠΈ except, ΡΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΡΠ΅ΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ°Π±ΠΎΡΡ:
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ else Ρ Π±Π»ΠΎΠΊΠΎΠΌ try ΠΈ except. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Python, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ else Python Exceptions: An Introduction.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ URL-Π°Π΄ΡΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ConnectionError, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ -1 Π΄Π»Ρ ΠΊΠΎΠ΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΡΡΠΎΠΊΡ Connection Error:
ΠΡΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π½ΡΠΆΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ, Π° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π² Π»ΠΎΠ³Π°Ρ . Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Π»ΠΎΠ³ΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ ΡΡΠ°ΡΡΠ΅ΠΉ ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python (Logging in Python).
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π² ΠΏΠ°ΠΊΠ΅Ρ logging, ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ ΠΈ Π²ΡΠ·Π²Π°Π² .exception() Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π² Π±Π»ΠΎΠΊΠ΅ except Π±Π»ΠΎΠΊΠ° try/except. ΠΠ°Ρ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Python ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π² stderr. Π’Π°ΠΊ ΠΊΠ°ΠΊ, ΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π°Π²ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ·ΠΎΠ²Π΅ΡΠ΅ Π΅Π³ΠΎ ΡΠ½ΠΎΠ²Π° Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΡΠΌ stderr, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π°ΡΠΈ ΠΆΡΡΠ½Π°Π»Ρ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ:
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π°ΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π½Π°ΠΉΡΠΈ, ΡΡΠΎ ΠΈΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. ΠΡΠΈ ΡΠ»Π΅Π΄Ρ ΠΌΠΎΠ³ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ³Π°ΡΡΠΈΠΌΠΈ, Π½ΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ΡΡ Ρ Π½ΠΈΠΌΠΈ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΡΠ°ΡΡΡΡ Π²Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ Π΄Π°ΡΡ Π²Π°ΠΌ Π»ΡΡΡΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ, ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·Ρ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° β ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ Π²Π°Ρ ΠΊΠΎΠ΄.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°Ρ Π²ΡΠ²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ traceback ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ. ΠΠΎΠ΄ΡΠ»Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π° Python.