Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Как Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Try Except Π² Python

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Python ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ позволяСт программисту Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ИспользованиС try-except являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнным ΠΈ СстСствСнным способом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Ρ… ошибок наряду со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ конструкциями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’ этом руководствС Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² использования try-except Π² Python.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСна ΠΏΡƒΡ‚Π΅ΠΌ настройки ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π»ΠΎΠΊ try, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ прСрываСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠ΄Π° останавливаСтся, ΠΈ элСмСнт управлСния ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Π±Π»ΠΎΠΊ except для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибки.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструкции Try-Except / Try-Except-else? Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Try-Except ΠΈ Try-Except-Else Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… нСизвСстных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ· вашСго ΠΊΠΎΠ΄Π°.

НапримСр, ΠΊΠΎΠ΄ Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ LBYL (Look before you leap), ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ race условиям. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ try-except. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° ваш ΠΊΠΎΠ΄ критичСски зависит ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Ρ‚ΡŒ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π΅ получСния. НапримСр, ΠΊΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²Ρ‹ os.path.exists ΠΈΠ»ΠΈ Queue.full, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ошибкой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°ΡŽΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Π‘ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ здСсь Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² своСм ΠΊΠΎΠ΄Π΅ стиля
try-except-else
, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ случаями.

Π’Ρ‹Π·ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ допустимо Π² Python. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, просто Π²Ρ‹Π·Π²Π°Π² Π² вашСм ΠΊΠΎΠ΄Π΅ raise Exception(β€˜Test error!’). Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΠ²ΡˆΠ΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ дальшС Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ? Они Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ популярныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ состояниС race, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для контроля ошибок Π² Ρ‚Π°ΠΊΠΈΡ… областях, ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, доступ ΠΊ сСти ΠΈ Ρ‚.

Π΄.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ прСдоставим Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² этом постС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ — это искусство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ возмоТности для написания Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΈ качСствСнного ΠΊΠΎΠ΄Π°. Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС замСчания ΠΏΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ вмСстС с Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ способами ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Python: совСты ΠΏΠΎ использованию Try-Except, Try-Except-Else ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅

1. Как ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ

Иногда Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ способ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ любоС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ.

Π­Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ достиТимо с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅. Π’ΠΎ врСмя тСстирования Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

try:
    #your code
except Exception as ex:
    print(ex)
2. ΠŸΠΎΠΉΠΌΠ°Ρ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Except
except (Exception1, Exception2) as e:
    pass

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ запятой, которая ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π² Python 2. 6 / 2.7. Но Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² Python 3. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово as.

3. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ Except

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ способов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ размСщСния всСх ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

try:
    file = open('input-file', 'open mode')
except (IOError, EOFError) as e:
    print("Testing multiple exceptions. {}".format(e.args[-1]))

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Except. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Except Π±Π»ΠΎΠΊΠΎΠ², сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅.

try:
    file = open('input-file', 'open mode')
except EOFError as ex:
    print("Caught the EOF error.")
    raise ex
except IOError as e:
    print("Caught the I/O error.")
    raise ex

ПослСднСС, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅, это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· упоминания ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

try:
    file = open('input-file', 'open mode')
except:
    raise

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π²Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π½ΠΈ малСйшСго прСдставлСния ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

4. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ проброс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python

Π’ΠΎΠ·Π½ΠΈΠΊΡˆΠΈΠ΅ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹. Π₯отя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ просто Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ raise Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ пСрСсмотру ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°.

try:
    # ΠŸΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
    raise Exception('I learn Python!')
except:
    print("Entered in except.")
    # Π’ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
    raise

Π’Ρ‹Π²ΠΎΠ΄:

Entered in except.
Traceback (most recent call last):
  File "python", line 3, in 
Exception: I learn Python!
5. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Else

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ else сразу послС Π±Π»ΠΎΠΊΠ° try-except. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ else Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π½Π΅ сгСнСрировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ else всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠ°ΠΌ except.

Π’ Π±Π»ΠΎΠΊΠΈ else Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ссли ошибок Π½Π΅ Π±Ρ‹Π»ΠΎ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ» while. Код Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ int(). Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ноль, Ρ‚ΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ достигнут успСх. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ else.

while True:
    x = int(input())

    try:
        result = 1 / x
    except:
        print("Error case")
        exit(0)
    else:
        print("Pass case")
        exit(1)
6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Finally

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΎ всСх ситуациях, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² Π±Π»ΠΎΠΊΠ΅

finally. Python всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ инструкции, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² Π±Π»ΠΎΠΊΠ΅ finally. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный способ выполнСния Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ очисткС. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ очистка ΠΏΡ€ΠΎΡˆΠ»Π°.

Ошибка ΠΏΠΎΠΉΠΌΠ°Π½Π° Π² Π±Π»ΠΎΠΊΠ΅ try. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ except Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, инструкции Π² Π±Π»ΠΎΠΊΠ΅ finally Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ finally Π±ΡƒΠ΄Π΅Ρ‚ ВБЕГДА Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅Π³ΠΎ.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅.

try:
    x = 1 / 0
except:
    print("Error occurred")
finally:
    print("The [finally clause] is hit")

Π’Ρ‹Π²ΠΎΠ΄:

Error occurred
The [finally clause] is hit
7. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово As для ΠΎΡ‚Π»ΠΎΠ²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IOError ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ.

try:
    f = open("no-file")
except IOError as err:
    print("Error:", err)
    print("Code:", err. errno)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

('Error:', IOError(2, 'No such file or directory'))
('Code:', 2)
8. Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° для создания ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ гСнСрирования ΠΎΠ±Ρ‰ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ это сдСлаСтС, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ вашСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

ΠŸΠ»ΠΎΡ…ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

def bad_exception():
    try:
        raise ValueError('Intentional - do not want this to get caught')
        raise Exception('Exception to be handled')
    except Exception as error:
        print('Inside the except block: ' + repr(error))
        
bad_exception()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Inside the except block: ValueError('Intentional - do not want this to get caught',)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π° Π½Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ. И ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΡ†ΠΈΡŽ args для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

try:
    raise ValueError('Testing exceptions: The input is in incorrect order', 'one', 'two', 'four') 
except ValueError as err:
    print(err.args)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

('Testing exceptions: The input is in incorrect order', 'one', 'two', 'four')
9. Как ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ошибки ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π’ ΠΈΠ΄Π΅Π°Π»Π΅, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ этого Π΄Π΅Π»Π°Ρ‚ΡŒ. Но Ссли Π²Ρ‹ всС Π΅Ρ‰Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, слСдуйтС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

try:
    assert False
except AssertionError:
    pass
print('Welcome to Prometheus!!!')

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Welcome to Prometheus!!!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

НаиболСС распространСнныС Exception Errors:

  • IOError — происходит ΠΏΡ€ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Ρ„Π°ΠΉΠ» Π½Π΅ открываСтся.
  • ImportError — Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈΠ»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.
  • ValueError — происходит, Ссли функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ Π½Π΅ подходящСго значСния.
  • KeyboardInterrupt — ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ»ΡŽΡ‡ прСрывания (Ρ‚.Π΅. Control-C ΠΈΠ»ΠΈ Del Π² консоли)
  • EOFError — Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (input() / raw_input()) ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² условиС ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° (EOF), Π½ΠΎ Π±Π΅Π· чтСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
except IOError:
print('Error occurred while opening the file.')

except ValueError:
print('Non-numeric input detected.')

except ImportError:
print('Unable to locate the module.')

except EOFError:
print('Identified EOF error.')

except KeyboardInterrupt:
print('Wrong keyboard input.')

except:
print('An error occurred.')

РСзюмС — Как Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Try-Except Π² Python

Π’ΠΎ врСмя программирования, ошибки Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹. Π­Ρ‚ΠΎ Ρ„Π°ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. И ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ для ошибок, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, нСдостаточныС ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ сСтСвого рСсурса, нСдостаток памяти ΠΈΠ»ΠΈ, скорСС всСго, ошибка программиста.

Π’ любом случаС, всС это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, Ссли ваш ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… конструкций, ΠΊΠ°ΠΊ try-except ΠΈΠ»ΠΈ try-except-else, try-except-finally.

Python | ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ПослСднСС обновлСниС: 27.04.2017

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Python ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ошибок. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ синтаксичСскиС ошибки (syntax error). Они ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ синтаксиса языка программирования ΠΏΡ€ΠΈ написании исходного ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… ошибок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирована. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² PyCharm, IDE сама ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ синтаксичСскиС ошибки ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΈΠΏ ошибок ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ошибки выполнСния (runtime error). Они ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΡƒΠΆΠ΅ скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² процСссС Π΅Π΅ выполнСния. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ. НапримСр, Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Ρ‚Π΅ΠΌΠ°Ρ… ΠΌΡ‹ рассматривали ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ числа Π² строку:


string = "5"
number = int(string)
print(number)

Π”Π°Π½Π½Ρ‹ΠΉ скрипт ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилируСтся ΠΈ выполнится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ строка «5» Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π² число. Однако возьмСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


string = "hello"
number = int(string)
print(number)

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого скрипта Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ строку «hello» нСльзя ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² число. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, здСсь ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, сто строка Π½Π΅ прСдставляСт число, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:


string = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
number = int(string)
print(number)

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрываСтся, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ повСдСния ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python Π΅ΡΡ‚ΡŒ конструкция try. .except, которая ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:


try:
	инструкции
except [Π’ΠΈΠΏ_ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ]:
	инструкции

Π’Π΅ΡΡŒ основной ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, помСщаСтся послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова try. Если Π² этом ΠΊΠΎΠ΄Π΅ гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊΠ΅ try прСрываСтся, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π»ΠΎΠΊ except.

ПослС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова except ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ValueError ΠΈΠ»ΠΈ KeyError). ПослС слова except Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ стокС ΠΈΠ΄ΡƒΡ‚ инструкции Π±Π»ΠΎΠΊΠ° except, выполняСмыС ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Рассмотрим ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ строки Π² число:


try:
    number = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: "))
    print("Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число:", number)
except:
    print("ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ")
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

Π’Π²ΠΎΠ΄ΠΈΠΌ строку:


Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: hello
ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· консольного Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ строки Π²Ρ‹Π²ΠΎΠ΄ числа Π½Π° консоль Π½Π΅ происходит, Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Π»ΠΎΠΊΡƒ except.

Π’Π²ΠΎΠ΄ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ число:


Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 22
Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число: 22
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС выполняСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΈ соотвСтствСнно Π±Π»ΠΎΠΊ except Π½Π΅ выполняСтся.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ сразу всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅. Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΡƒΠΊΠ°Π·Π°Π² Π΅Π³ΠΎ послС слова except:


try:
    number = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: "))
    print("Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число:", number)
except ValueError:
    print("ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ")
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

Если ситуация Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрированы Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ выраТСния except:


try:
    number1 = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: "))
    number2 = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: "))
    print("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСлСния:", number1/number2)
except ValueError:
    print("ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ")
except ZeroDivisionError:
    print("ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° дСлСния числа Π½Π° ноль")
except Exception:
    print("ΠžΠ±Ρ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅")
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

Если Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прСобразования строки Π² число, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π±Π»ΠΎΠΊΠΎΠΌ except ValueError. Если ΠΆΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль, Ρ‚ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ZeroDivisionError, ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π±Π»ΠΎΠΊΠΎΠΌ except ZeroDivisionError.

Π’ΠΈΠΏ Exception прСдставляСт ΠΎΠ±Ρ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ всС ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ситуации. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС любоС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ прСдставляСт Ρ‚ΠΈΠΏ ValueError ΠΈΠ»ΠΈ ZeroDivisionError, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π² Π±Π»ΠΎΠΊΠ΅ except Exception:.

Π‘Π»ΠΎΠΊ finally

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ finally. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ этого Π±Π»ΠΎΠΊΠ° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ выполняСтся Π²Π½Π΅ зависимости, Π±Ρ‹Π»ΠΎ Π»ΠΈ сгСнСрировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:


try:
    number = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: "))
    print("Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число:", number)
except ValueError:
    print("НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ число")
finally:
    print("Π‘Π»ΠΎΠΊ try Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅")
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±Π»ΠΎΠΊ finally примСняСтся для освобоТдСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… рСсурсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для закрытия Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° as ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ except:


try:
    number = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: "))
    print("Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число:", number)
except ValueError as e:
    print("БвСдСния ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ", e)
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°:


Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: fdsf
БвСдСния ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ invalid literal for int() with base 10: 'fdsf'
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ГСнСрация ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Для этого примСняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ raise.


try:
    number1 = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: "))
    number2 = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: "))
    if number2 == 0:
        raise Exception("Π’Ρ‚ΠΎΡ€ΠΎΠ΅ число Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ 0")
    print("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСлСния Π΄Π²ΡƒΡ… чисСл:", number1/number2)
except ValueError:
    print("Π’Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅")
except Exception as e:
    print(e)
print("Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹")

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ вывСсти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:


Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 1
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 0
Π’Ρ‚ΠΎΡ€ΠΎΠ΅ число Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ 0
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ try-except-else Π² Python?

Π’ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сущСствования try-except-else?

Π‘Π»ΠΎΠΊ try позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π‘Π»ΠΎΠΊ except Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Если Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ошибки.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ else Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ ошибок, ΠΈ, Π½Π΅ выполняя этот ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ try , Π²Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠΈΡ‚Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ ошибки. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ ошибки ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ошибки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

НапримСр:

try:
    try_this(whatever)
except SomeException as the_exception:
    handle(the_exception)
else:
    return something

Π’ Π½Π°Π±ΠΎΡ€Π΅ «try, except» Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΠ½ΠΊΡ‚Π°, else ΠΈ finally . Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это try-except-else-finally .

else Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try . Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅:

no_error = None
try:
    try_this(whatever)
    no_error = True
except SomeException as the_exception:
    handle(the_exception)
if no_error:
    return something

поэтому, Ссли ΠΌΡ‹ сравним else с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ (которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ошибки), ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° сокращаСт строки ΠΊΠΎΠ΄Π°, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΡƒΡŽ, Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π³Π»ΡŽΡ‡Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ.

finally

finally Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо Π½ΠΈ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ, Π΄Π°ΠΆΠ΅ Ссли другая строка вычисляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return.

Разбивкой с псСвдо-код

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ это Π½Π° части, Π² самой малСнькой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, которая дСмонстрируСт всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с коммСнтариями. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ этот синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ (Π½ΠΎ Π½Π΅ выполняСмый, Ссли ΠΈΠΌΠ΅Π½Π° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹) псСвдокод находится Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НапримСр:

try:
    try_this(whatever)
except SomeException as the_exception:
    handle_SomeException(the_exception)
    # Handle a instance of SomeException or a subclass of it.
except Exception as the_exception:
    generic_handle(the_exception)
    # Handle any other exception that inherits from Exception
    # - doesn't include GeneratorExit, KeyboardInterrupt, SystemExit
    # Avoid bare `except:`
else: # there was no exception whatsoever
    return something()
    # if no exception, the "something()" gets evaluated,
    # but the return will not be executed due to the return in the
    # finally block below. 
finally:
    # this block will execute no matter what, even if no exception,
    # after "something" is eval'd but before that value is returned
    # but even if there is an exception.
    # a return here will hijack the return functionality. e.g.:
    return True # hijacks the return in the else clause above

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊ else вмСсто этого Π² Π±Π»ΠΎΠΊ try , Π³Π΄Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½ΠΎ Ρ‡Ρ‚ΠΎ, Ссли этот ΠΊΠΎΠ΄ сам Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π»ΠΎΠ²ΠΈΠΌ? ΠžΡΡ‚Π°Π²ΠΈΠ² Π΅Π³ΠΎ Π² Π±Π»ΠΎΠΊΠ΅ try , ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки ΠΊΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊΠ΅ try , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ, Π² соотвСтствии с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли наш ΠΊΠΎΠ΄ Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Π» Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π³Ρ€ΠΎΠΌΠΊΠΎ. Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° .

Насколько я понимаю, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ-это Π½Π΅ ошибки

Π’ Python Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибками.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pydoc. НапримСр, Π² Python 2:

$ python -m pydoc exceptions

ΠΈΠ»ΠΈ Python 3:

$ python -m pydoc builtins

Даст Π½Π°ΠΌ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²ΠΈΠ΄ΠΎΠ² Exception ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибками, хотя Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… для Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² for ( StopIteration ). это иСрархия Python 3:

BaseException
    Exception
        ArithmeticError
            FloatingPointError
            OverflowError
            ZeroDivisionError
        AssertionError
        AttributeError
        BufferError
        EOFError
        ImportError
            ModuleNotFoundError
        LookupError
            IndexError
            KeyError
        MemoryError
        NameError
            UnboundLocalError
        OSError
            BlockingIOError
            ChildProcessError
            ConnectionError
                BrokenPipeError
                ConnectionAbortedError
                ConnectionRefusedError
                ConnectionResetError
            FileExistsError
            FileNotFoundError
            InterruptedError
            IsADirectoryError
            NotADirectoryError
            PermissionError
            ProcessLookupError
            TimeoutError
        ReferenceError
        RuntimeError
            NotImplementedError
            RecursionError
        StopAsyncIteration
        StopIteration
        SyntaxError
            IndentationError
                TabError
        SystemError
        TypeError
        ValueError
            UnicodeError
                UnicodeDecodeError
                UnicodeEncodeError
                UnicodeTranslateError
        Warning
            BytesWarning
            DeprecationWarning
            FutureWarning
            ImportWarning
            PendingDeprecationWarning
            ResourceWarning
            RuntimeWarning
            SyntaxWarning
            UnicodeWarning
            UserWarning
    GeneratorExit
    KeyboardInterrupt
    SystemExit

— Бпросил ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€:

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΈΠ½Π³ΡƒΠ΅Ρ‚ внСшний API, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² классС Π²Π½Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ API, Π²Ρ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ e ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ except, Π³Π΄Π΅ e — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

НСт, Π²Ρ‹ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΠ»ΠΎΠ³ΠΎ raise , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ трассировку стСка.

try:
    try_this(whatever)
except SomeException as the_exception:
    handle(the_exception)
    raise

Или, Π² Python 3, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π΄ΠΎΡ€ΠΎΠΆΠΊΡƒ с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

try:
    try_this(whatever)
except SomeException as the_exception:
    handle(the_exception)
    raise DifferentException from the_exception

Π—Π΄Π΅ΡΡŒ я ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡΡŒ Π½Π° своСм ΠΎΡ‚Π²Π΅Ρ‚Π΅ .

try except finally Π² Python

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Β«ΡƒΠ±ΠΎΡ€ΠΊΠΈΒ» для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° инструкций.

Данная составная инструкция ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ для ΠΊΠΎΠ΄Π°, ΠΈΠ΄ΡƒΡ‰Π΅Π³ΠΎ Π² Π±Π»ΠΎΠΊΠ΅ try.
class MyException1(Exception): pass
class MyChildException1(MyException1): pass

class MyException2(Exception): pass
class MyChildException2(MyException2): pass

class MyException3(Exception): pass
class MyChildException3(MyException3): pass

def make_exception(exception_type):

try:
raise exception_type()

except MyChildException1:
print('MyChildException1')

except (MyChildException2, MyException3):
print('MyChildException2, MyException3')

except:
print('broad except')

make_exception(MyChildException1) # MyChildException1
make_exception(MyException2) # broad except
make_exception(MyChildException3) # MyChildException2, MyException3


Π‘Π»ΠΎΠΊ try

  • Если Π² Ρ…ΠΎΠ΄Π΅ исполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π΅ задСйствуСтся.
  • Если Π² Ρ…ΠΎΠ΄Π΅ исполнСния инструкций Π² этом Π±Π»ΠΎΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ зафиксировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ начнётся поиск подходящСго для Π½Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Поиск производится ΠΏΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ except ΠΏΠΎΠΎΡ‡Π΅Ρ€Ρ‘Π΄Π½ΠΎ, поэтому Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (Π±Π°Π·ΠΎΠ²Ρ‹Π΅) ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ послС Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΠΈΡ….
Π‘Π»ΠΎΠΊ except

Π’Π°ΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ). ВсС Π±Π»ΠΎΠΊΠΈ except Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ рСализуСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ПослС достиТСния ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ° исполнСниС продолТаСтся с мСста, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° всСй инструкциСй. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ Π² случаС, Ссли ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ происходит Π² Ρ‚Π΅Π»Π΅ Π±Π»ΠΎΠΊΠ° try самого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ, Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самым Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

  • Если Π±Π»ΠΎΠΊ except ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½ΠΈΠΌ выраТСния, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ послСдним, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ производится ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².
  • Если Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ слСдуСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «совмСстим» с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ собираСмся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ инструкции, находящиСся Π² Π΄Π°Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ считаСтся совмСстимым с поднятым ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ссли являСтся классом (нСпосрСдствСнным, Π»ΠΈΠ±ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, содСрТащим элСмСнт, совмСстимый с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ.
  • Если Π² Ρ…ΠΎΠ΄Π΅ поиска ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΉΠ΄Π΅Π½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚ΠΎ поиск Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ срСди ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎ стСку.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ распространяСтся ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²Π°, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ Π½Π΅ встрСтится Π±Π»ΠΎΠΊ finally, Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ этом случаС ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ «потСряно» ΠΈΠ·-Π·Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ.


  • Если Π² Ρ…ΠΎΠ΄Π΅ выполнСния выраТСния Π² Π±Π»ΠΎΠΊΠ΅ except Π±ΡƒΠ΄Π΅Ρ‚ случится ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ поиск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрываСтся. ΠŸΡ€ΠΈ этом начинаСтся поиск Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²Π°. ΠŸΡ€ΠΈ этом считаСтся, Ρ‡Ρ‚ΠΎ вся инструкция try except ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
  • Если Π½Π°ΠΉΠ΄Π΅Π½ подходящий Π±Π»ΠΎΠΊ except, Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ назначаСтся имя ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова as (Π΄ΠΎ +py.2.5 вмСсто ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π°Π»ΡΡŒ запятая ,). ПослС Ρ‡Π΅Π³ΠΎ выполняСтся ΠΊΠΎΠ΄ Π² Ρ‚Π΅Π»Π΅ Π±Π»ΠΎΠΊΠ°.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ строки, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ %r вмСсто %s. Π’Π°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкст, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ имя, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½ΠΎ послС исполнСния Π±Π»ΠΎΠΊΠ° except. Π’Π°ΠΊ сдСлано ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ вмСстС с ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠΉ ΠΊ Π½Π΅ΠΌΡƒ трассировкой стСка, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку со Ρ„Ρ€Π΅ΠΉΠΌΠΎΠΌ стСка, Π³Π΄Π΅ хранятся всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сборки мусора.

try:
raise Exception('arg1', 'arg2')

except Exception as e:
print(e)

# >> ('arg1', 'arg2')


ΠŸΠ΅Ρ€Π΅Π΄ исполнСниСм Π±Π»ΠΎΠΊΠ° except, Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ sys ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ sys.exc_info().

Π”ΠΎ +py2.5 нСльзя Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ except совмСстно с finally, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, сущСствовали Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ инструкции: try ... except ΠΈ try ... finally.

Π‘Π»ΠΎΠΊ else

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Π² этом Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Π±Π»ΠΎΠΊΠ° try Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Π΅Π· return, continue ΠΈ break.
def make_exception():

try:
return 'try'

except:
return 'except'

else:
return 'else'

make_exception() # 'try'


Π‘Π»ΠΎΠΊ finally

Π’ этом Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π»ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Β«ΡƒΠ±ΠΎΡ€ΠΊΠΈΒ». Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ· этого Π±Π»ΠΎΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ послС выполнСния всСх ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ², Π² Ρ‚ΠΎΠΌ числС Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ (Π² этом случаС ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ Π±Π»ΠΎΠΊΠ° finally автоматичСски) ΠΈ Ссли Π² Π±Π»ΠΎΠΊΠ΅ try ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ return ΠΈΠ»ΠΈ break. ΠŸΡ€ΠΈ этом информация ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ нСдоступна.

Π’ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСализациях ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ continue Π² Π±Π»ΠΎΠΊΠ΅ finally Π½Π΅ поддСрТиваСтся.


Если Π² Π±Π»ΠΎΠΊΠ΅ имССтся инструкция return ΠΈΠ»ΠΈ break информация ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ (Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ) Π±ΡƒΠ΄Π΅Ρ‚ утСряна:
def make_exception():    
try:
1/0

finally:
return 'finally'

make_exception() # 'finally'


+py3.0 Если Π² Π±Π»ΠΎΠΊΠ΅ finally возбуТдаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΠΌΡƒ Π² качСствС контСкста Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π”ΠΎ -py3.0 Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… сцСнариях информация ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ‚Π΅Ρ€ΡΠ»Π°ΡΡŒ.
+py3.8 Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ finally ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ continue.
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния

Π‘Π°ΠΌΠ° инструкция вСсьма ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ. Π”ΠΎΡ€ΠΎΠ³ΠΎ обходится нСпосрСдствСнно ΠΎΡ‚Π»ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π”ΠΎ вСрсии +py2.0 ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ часто Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

try:
value = mydict[key]
except KeyError:
mydict[key] = getvalue(key)
value = mydict[key]

Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π»ΠΎ смысл лишь ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡŽΡ‡ присутствовал Π² словарС Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв.
Π˜Π½Π°Ρ‡Π΅ ΠΊΠΎΠ΄ выглядСл Ρ‚Π°ΠΊ:
if key in mydict:
value = mydict[key]
else:
value = mydict[key] = getvalue(key)

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ value = dict.setdefault(key, getvalue(key)), Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Ρ‹Π·ΠΎΠ² getvalue() достаточно Π΄Ρ‘ΡˆΠ΅Π² (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² любом случаС Π±ΡƒΠ΄Π΅Ρ‚ вычислСно).
goto

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ описанный Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ слСдуСт Π² случаях насущной нСобходимости, Π±Π΅Π· Ρ„Π°Π½Π°Ρ‚ΠΈΠ·ΠΌΠ°.

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструкции ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΡ€ΡƒΠ΄ΠΈΡ‚ΡŒ достаточно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ go ΠΈ goto ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования.

class label(Exception): pass  # ΠΌΠ΅Ρ‚ΠΊΠ° для goto

try:
...
if condition: raise label() # ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅
...
except label: # рСализация ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ΅
pass
...


Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ даст ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈ Π½Π΅ трСбуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ считаСтся ΠΏΠ»ΠΎΡ…ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ goto.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Pythonβ€”ArcGIS Pro

Ошибки ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ. НаписаниС скриптов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок, сохраняСт массу Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²Π°ΡˆΠΈΡ… сил. Когда инструмСнт Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ошибкС, ArcPy Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ структуры ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π½Π΅ связанным с инструмСнтом Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π˜Ρ… Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ знакомят вас с основами ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python.

Когда инструмСнт записываСт сообщСниС ΠΎΠ± ошибкС, ArcPy создаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ arcpy.ExecuteError. Python позволяСт Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ автоматичСски ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ систСмной ошибки. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого модуля для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΎΡ‚ ArcPy ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ…. Если скрипт Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ модуля для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния ошибками ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности скриптов.

БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² инструмСнтах Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΡˆΠ΅ΡΡ‚ΠΈΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ занСсСны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, содСрТащиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствиях.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ try-except

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ try-except ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для раздСлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° шаги, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ мСста возникновСния ошибок. Если ошибка случаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ выраТСния try, вызываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ выполняСтся ΠΊΠΎΠ΄ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ except. ИспользованиС выраТСния except являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простой Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Π‘ΡƒΡ„Π΅Ρ€ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ buffer_distance_or_field. ВмСсто Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π΅Π· объяснСния ΠΏΡ€ΠΈΡ‡ΠΈΠ½, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ except ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска ошибки, Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния ΠΎΠ± ошибкС, созданной инструмСнтом Π‘ΡƒΡ„Π΅Ρ€. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ except выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли Π² инструмСнтС Π‘ΡƒΡ„Π΅Ρ€ происходит ошибка.

import arcpy
import sys
try:
    # Execute the Buffer tool
    arcpy.Buffer_analysis("c:/transport/roads.shp", "c:/transport/roads_buffer.shp")
except Exception:
    e = sys.exc_info()[1]
    print(e.args[0])
    # If using this code within a script tool, AddError can be used to return messages 
    #   back to a script tool. If not, AddError will have no effect.
    arcpy.AddError(e.args[0])

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ try содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ finally, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ для Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² любом случаС, Π²Π½Π΅ зависимости ΠΎΡ‚ появлСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ArcGIS 3D Analyst Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ finally, Ρ‡Ρ‚ΠΎ обСспСчиваСт постоянноС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ модуля.

class LicenseError(Exception):
    pass
import arcpy
try:
    if arcpy.CheckExtension("3D") == "Available":
        arcpy.CheckOutExtension("3D")
    else:
        # Raise a custom exception
        raise LicenseError
    arcpy.env.workspace = "D:/GrosMorne"
    arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
    arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except LicenseError:
    print "3D Analyst license is unavailable"  
except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
finally:
    # Check in the 3D Analyst extension
    arcpy.CheckInExtension("3D")

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ raise

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π² ΠΊΠΎΠ΄Π΅ Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ raise. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ raise ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ класс пространствСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² опрСдСляСтся ΠΊΠ°ΠΊ Π½Π΅ содСрТащий ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ошибка, Π½ΠΎ условиС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован.

class NoFeatures(Exception):
    pass
import arcpy
import os
import sys
arcpy.env.overwriteOutput = True
fc = arcpy.GetParameterAsText(0)
try:
    # Check that the input has features
    result = arcpy.GetCount_management(fc)
    if int(result[0]) > 0:
        arcpy.FeatureToPolygon_management(
            fc, os.path.join(os.path.dirname(fc), 'out_poly.shp'))
    else:
        # Raise custom exception
        raise NoFeatures(result)
except NoFeatures:
    # The input has no features
    print('{} has no features'.format(fc))
except:
    # By default any other errors will be caught here
    e = sys.exc_info()[1]
    print(e.args[0])

Класс ExecuteError

Если Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ инструмСнта Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрываСтся, Ρ‚ΠΎ появляСтся класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ arcpy.ExecuteError, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ошибки Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹, ошибки Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ arcpy.ExecuteError) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок. Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эти ошибки ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅:

import arcpy
import sys
try:
    result = arcpy.GetCount_management("C:/invalid.shp")
  
# Return geoprocessing specific errors
except arcpy.ExecuteError:    
    arcpy.AddError(arcpy.GetMessages(2))    
# Return any other type of error
except:
    # By default any other errors will be caught here
    e = sys.exc_info()[1]
    print(e.args[0])

traceback

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТных скриптах Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто возникновСния ошибки. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Python sys ΠΈ traceback ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ вмСстС для опрСдСлСния Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ располоТСния ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ появлСния ошибки, опрСдСлСния самой ошибки Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ экономят врСмя ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ скрипта.

# Import the required modules
#
import arcpy
import sys
import traceback
arcpy.env.workspace = "C:/Data/myData.gdb"
try:
    arcpy.CreateSpatialReference_management()
    #--------------------------
    # Your code goes here
    #
    # See the table below for examples
    #--------------------------
except arcpy.ExecuteError: 
    # Get the tool error messages 
    msgs = arcpy.GetMessages(2) 
    # Return tool error messages for use with a script tool 
    arcpy.AddError(msgs) 
    # Print tool error messages for use in Python/PythonWin 
    print(msgs)
except:
    # Get the traceback object
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    # Concatenate information together concerning the error into a message string
    pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
    msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
    # Return python error messages for use in script tool or Python window
    arcpy.AddError(pymsg)
    arcpy.AddError(msgs)
    # Print Python error messages for use in Python / Python window
    print(pymsg)
    print(msgs)

Если Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ использован, ΠΈ Π² Π½Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, такая ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ arcpy.ExecuteError, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использовано ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ except. Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetMessages. Если Π² ΠΊΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π±ΡƒΠ΄Π΅Ρ‚ использовано Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ except. ВмСсто Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния ΠΎ процСссС Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ traceback ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ подходящСС сообщСниС ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ систСмной ошибкС.

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ ошибки, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ использован вмСсто Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – ошибка инструмСнта Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, которая Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ traceback ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Π° происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ гСнСрация Π΄Π°Π½Π½Ρ‹Ρ… traceback.

Π’Π°Ρˆ ΠΊΠΎΠ΄Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ошибка

arcpy.GetCount_management(«»)

PYTHON ERRORS:
Traceback info:
  File "c:\temp\errortest.py", line 10, in <module>
    arcpy.GetCount_management("")
Error Info:
Failed to execute. Parameters are not valid.
ERROR 000735: Input Rows: value is required
Failed to execute (GetCount).
ArcPy ERRORS:
Failed to execute. Parameters are not valid.
ERROR 000735: Input Rows: value is required
Failed to execute (GetCount).

x = «a» + 1

PYTHON ERRORS:
Traceback info:
  File "c:\temp\errortest.py", line 10, in <module>
    x = "a" + 1
Error Info:
cannot concatenate 'str' and 'int' objects

float(«a text string»)

PYTHON ERRORS:
Traceback info:
  File "c:\temp\errortest.py", line 10, in <module>
    float("a text string")
Error Info:
invalid literal for float(): a text string

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ошибки

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Result

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ информация ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Result, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅:

result = arcpy.GetCount_management("c:/data/rivers.shp")

Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ GetCount_management выдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Result Π½Π΅ создаСтся. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Result.

import arcpy
try:
    result = arcpy.GetCount_management("c:/data/rivers.shp")
# Return Geoprocessing specific errors
# (this method is incorrect!)
except arcpy.ExecuteError:
    arcpy.AddError(result.getMessages(2))

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прСдставлСнного Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π° прСрываСтся с сообщСниСм name ‘result’ is not defined. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Result Π½Π΅ создаСтся ΠΈΠ·-Π·Π° ошибки инструмСнта. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Result Π½Π΅ создаСтся, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMessages Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Python.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Result, создаваСмый посрСдством слуТбы Π³Π΅ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ArcGIS Server, создаСтся Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ошибкС инструмСнта. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Result Π½Π΅ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° инструмСнт запускаСтся локально ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± использовании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° result смотритС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ИспользованиС инструмСнтов Π² Python.


ΠžΡ‚Π·Ρ‹Π² ΠΏΠΎ этому Ρ€Π°Π·Π΄Π΅Π»Ρƒ?

Π Π°Π±ΠΎΡ‚Π° с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ try/except/else/finally β€” ДокумСнтация Python для сСтСвых ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² 3.0

try/except

Если Π²Ρ‹ повторяли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎ навСрняка Π±Ρ‹Π»ΠΈ ситуации, ΠΊΠΎΠ³Π΄Π° выскакивала ошибка. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, это Π±Ρ‹Π»Π° ошибка синтаксиса, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, двоСточия.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Python довольно понятно Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки, ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠΎΠ΄ синтаксичСски написан ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки. Π’ Python эти ошибки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (exceptions).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

In [1]: 2/0
-----------------------------------------------------
ZeroDivisionError: division by zero

In [2]: 'test' + 2
-----------------------------------------------------
TypeError: must be str, not int

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π΄Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ZeroDivisionError ΠΈ TypeError.

Π§Π°Ρ‰Π΅ всСго ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

НапримСр, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄Π²Π° числа, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΈΡ… сумму, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π» вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· чисСл строку, появится ошибка TypeError, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

Python позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Когда Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° сразу Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция try/except:

In [3]: try:
   ...:     2/0
   ...: except ZeroDivisionError:
   ...:     print("You can't divide by zero")
   ...:
You can't divide by zero

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ try Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ записаны Π² Π±Π»ΠΎΠΊΠ΅ try
  • Ссли ΠΏΡ€ΠΈ выполнСния Π±Π»ΠΎΠΊΠ° try Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π±Π»ΠΎΠΊ except пропускаСтся, ΠΈ выполняСтся дальнСйший ΠΊΠΎΠ΄
  • Ссли Π²ΠΎ врСмя выполнСния Π±Π»ΠΎΠΊΠ° try Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ мСстС Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠ° try пропускаСтся
    • Ссли Π² Π±Π»ΠΎΠΊΠ΅ except ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ, выполняСтся ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ except
    • Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ, Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π±Π»ΠΎΠΊΠ΅ except, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрываСтся ΠΈ выдаСтся ошибка

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ строка Cool! Π² Π±Π»ΠΎΠΊΠ΅ try Π½Π΅ выводится:

In [4]: try:
   ...:     print("Let's divide some numbers")
   ...:     2/0
   ...:     print('Cool!')
   ...: except ZeroDivisionError:
   ...:     print("You can't divide by zero")
   ...:
Let's divide some numbers
You can't divide by zero

Π’ конструкции try/except ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ except, Ссли Π½ΡƒΠΆΠ½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ дСйствия Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ошибки.

НапримСр, скрипт divide.py Π΄Π΅Π»ΠΈΡ‚ Π΄Π²Π° числа Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ:

# -*- coding: utf-8 -*-

try:
    a = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: ")
    b = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: ")
    print("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ", int(a)/int(b))
except ValueError:
    print("ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа")
except ZeroDivisionError:
    print("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ выполнСния скрипта:

$ python divide.py
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 3
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 1
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:  3

$ python divide.py
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 5
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 0
На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя

$ python divide.py
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: qewr
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 3
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π» строку вмСсто числа, Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π² число.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ZeroDivisionError Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² случаС, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ 0.

Если Π½Π΅Ρ‚ нСобходимости Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сообщСния Π½Π° ошибки ValueError ΠΈ ZeroDivisionError, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ (Ρ„Π°ΠΉΠ» divide_ver2.py):

# -*- coding: utf-8 -*-

try:
    a = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: ")
    b = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: ")
    print("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ", int(a)/int(b))
except (ValueError, ZeroDivisionError):
    print("Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ...")

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

$ python divide_ver2.py
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: wer
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 4
Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ...

$ python divide_ver2.py
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 5
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 0
Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ Π±Π»ΠΎΠΊΠ΅ except ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся!

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ с использованиСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΈ Π±Π΅Π· Π½ΠΈΡ….

НапримСр, этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π°:

while True:
    a = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    b = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: ")
    try:
        result = int(a)/int(b)
    except ValueError:
        print("ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа")
    except ZeroDivisionError:
        print("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя")
    else:
        print(result)
        break

МоТно ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Π΅Π· try/except (Ρ„Π°ΠΉΠ» try_except_divide.py):

while True:
    a = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    b = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: ")
    if a.isdigit() and b.isdigit():
        if int(b) == 0:
            print("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя")
        else:
            print(int(a)/int(b))
            break
    else:
        print("ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа")

Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±Π΅Π· использования ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ простым ΠΈ понятным.

Π’Π°ΠΆΠ½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ понятный, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ — с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·.

Если Π²Ρ‹ Ρ€Π°Π½ΡŒΡˆΠ΅ использовали ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык программирования, Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ использованиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΡΡ‡ΠΈΡ‚Π°Π»ΠΎΡΡŒ ΠΏΠ»ΠΎΡ…ΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ. Π’ Python это Π½Π΅ Ρ‚Π°ΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с этим вопросом, посмотритС ссылки Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² ΠΊΠΎΠ½Ρ†Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python: ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ошибок (try-except)

Иногда, Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Π΅ ситуации. НапримСр, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ число Π½Π° ноль ΠΈΠ»ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ остановят Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠ΅ ситуации Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ситуациями, Π° ошибки — ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ (exception). Для Ρ€Π°Π·Π½Ρ‹Ρ… ситуаций Π΅ΡΡ‚ΡŒ свои Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

2 / 0  

open('non_existing_file.txt')  

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, названия ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ довольно Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ возникновСния ошибки. Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π°: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ программисту Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Однако, ΠΊΠΎΠ³Π΄Π° выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, вмСстС с Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠΎΠΌ Π½Π° экран выводится Π΅Ρ‰Ρ‘ цСлая ΠΊΡƒΡ‡Π° ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:



def average(numbers):
    return sum(numbers) / len(numbers)
    
average([1, 2, 3])  
average([])  

Π’Ρ‹ΠΉΠ΄Π΅Ρ‚ такая ошибка:

Traceback (most recent call last):        # 6
  File "example.py", line 5, in <module>  # 5
    average([])                           # 4
  File "example.py", line 2, in average   # 3
    return sum(numbers) / len(numbers)    # 2
ZeroDivisionError: division by zero       # 1

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π½Ρ тСкста Π½Π° послСдних ΡˆΠ΅ΡΡ‚ΠΈ строчках называСтся трэйсбэком. Он выглядит ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π’ Π½Ρ‘ΠΌ Python рассказываСт Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Π’Π°ΠΆΠ½ΠΎ: трСйсбСк Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ снизу Π²Π²Π΅Ρ€Ρ…. ИмСнно поэтому ΠΌΡ‹ расставили Ρ‚Π°ΠΊΡƒΡŽ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ строчСк Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строчку Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅:

1) ZeroDivisionError: division by zero β€” Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ сообщСниС с ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ошибки. Если пСрСвСсти Π½Π° русский, сразу понятно: ΠžΡˆΠΈΠ±ΠΊΠ°Π”Π΅Π»Π΅Π½ΠΈΡΠΠ°ΠΠΎΠ»ΡŒ: Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΠΈ Π½Π° ноль.

2) return sum(numbers) / len(numbers) β€” строка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

3) File "example.py", line 2, in average β€” Π³Π΄Π΅ эту строку ΠΈΡΠΊΠ°Ρ‚ΡŒ. Π’ Ρ„Π°ΠΉΠ»Π΅ example.py, Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ average.

4 ΠΈ 5) Начиная с этой строки ΠΈ Π΄Π°Π»Π΅Π΅, Python Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ строки ΠΊΠΎΠ΄Π° исполнялись Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ вся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°. Π­Ρ‚Π° информация Π½ΡƒΠΆΠ½Π°, ΠΊΠΎΠ³Π΄Π° ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Π³Π΄Π΅-Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ трСйсбэк снизу Π²Π²Π΅Ρ€Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ строчку вашСго ΠΊΠΎΠ΄Π°, которая стала ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ошибки.

6) Начало трСйсбэка

Каким Π±Ρ‹ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ трСйсбСк Π½ΠΈ Π±Ρ‹Π», Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π²Π°ΠΌ понадобится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдниС Π΄Π²Π΅-Ρ‚Ρ€ΠΈ строки. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡ… достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈ Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, трСйсбэки Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΡƒΠΆ ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹Π΅, Ссли Π·Π½Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

Если возникшСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ особСнном ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΎΠΉ случай Π² Python сущСствуСт конструкция try-except:

filepath = user.get_avatar_filepath()
try:
    avatar = Image.open(filepath)
except FileNotFoundError:
    avatar = default_avatar

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try(Π²Π½ΡƒΡ‚Ρ€ΠΈ β€” это с отступами) ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚, Ρ‚ΠΎ Python ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊ except ΠΈ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ дальшС. Если ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка β€” сработаСт ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° except.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС except стоит Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ try. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π°. ΠœΡ‹ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΈΠΏ ошибки, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ.

Код, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏ ошибки выглядит Ρ‚Π°ΠΊ:

filepath = user.get_avatar_filepath()
try:
    avatar = use_avatar(filepath)
except:
    avatar = default_avatar

ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ случится ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ΅: другая ошибка. Но ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ сСбя вСсти Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ просто Π½Π΅ Π½Π°ΡˆΡ‘Π» Ρ„Π°ΠΉΠ». Python Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ трСйсбСк ΠΈ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ придСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π½Π΅Π½Π°ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ‚Ρ‹ΠΊΠ°.

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, каТСтся, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ просто написал Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ сам сСбС Π½Π΅ довСряСт. Π‘Π΅Π· особой нСобходимости Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ нСльзя.

Python ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅, ΠΊΡ€ΠΎΠΌΠ΅


Π‘Π»ΠΎΠΊ try позволяСт ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ошибок.

Π‘Π»ΠΎΠΊ ΠΊΡ€ΠΎΠΌΠ΅ позволяСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π‘Π»ΠΎΠΊ finally позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ нСзависимо ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π±Π»ΠΎΠΊΠΎΠ² try- ΠΈ except.


ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ, Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ останавливаСтся ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС.

Π­Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π»ΠΎΠΊ try сгСнСрируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ x Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ:

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
print (x)
except:
print (Β«ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Β»)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Π»ΠΎΠΊ try Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π±Π»ΠΎΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½.

Π‘Π΅Π· Π±Π»ΠΎΠΊΠ° try ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· строя ΠΈ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ x Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ:

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (x)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, сколько Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.Π³Ρ€Π°ΠΌΠΌ. Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° для особого Π²ΠΈΠ΄Π° ошибки:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ВывСсти ΠΎΠ΄Π½ΠΎ сообщСниС, Ссли Π±Π»ΠΎΠΊ try Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ NameError ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ошибок:

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
print (x)
except NameError:
print («ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ x Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ «)
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ:
print (» Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ пошло Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ «)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово else для опрСдСлСния Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Ссли ошибок Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Π»ΠΎΠΊ try Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
print («ΠŸΡ€ΠΈΠ²Π΅Ρ‚»)
except:
print («Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ «)
else:
print (» НичСго Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ «)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

НаконСц

Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π±Π»ΠΎΠΊ finally , Ссли ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Π»ΠΎΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
print (x)
except:
print («Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ «)
Π½Π°ΠΊΠΎΠ½Π΅Ρ†:
print (» ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°, ΠΊΡ€ΠΎΠΌΠ΅ «Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°»)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для закрытия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ очистки рСсурсов:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСдоступСн для записи:

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
f = open («demofile.txt»)
f.write («Lorum Ipsum»)
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ:
print («Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ записи Π² Ρ„Π°ΠΉΠ» «)
Π½Π°ΠΊΠΎΠ½Π΅Ρ†:
Ρ„.Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ()

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ, Π½Π΅ оставляя Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ.


Π’Ρ‹Π·ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ условия.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ (ΠΈΠ»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’Ρ‹Π·ΠΎΠ² ошибки ΠΈ остановка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли x мСньшС 0:

x = -1

, Ссли x <0:
Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ («Πš соТалСнию, Π½ΠΈΠΆΠ΅ Π½Π΅Ρ‚ чисСл ноль «)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈ тСкст для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError, Ссли x Π½Π΅ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом:

x = «hello»

, Ссли нС type (x) is int:
raise TypeError («Π’олько Ρ†Π΅Π»Ρ‹Π΅ числа Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ «)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Python Try Except — GeeksforGeeks

Ошибка Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²: синтаксичСскиС ошибки ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Ошибки — это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° происходят Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Ошибки ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python
НСкоторыС ΠΈΠ· распространСнных ошибок ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • IOError: , Ссли Ρ„Π°ΠΉΠ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚
  • KeyboardInterrupt: , ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ.
  • ValueError: , ΠΊΠΎΠ³Π΄Π° встроСнная функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.
  • EOFError: , Ссли достигаСтся ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· чтСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….
  • ImportError: , Ссли это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Try Except Π² Python

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Try and Except ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих ошибок Π² нашСм ΠΊΠΎΠ΄Π΅ Π½Π° Python.Π‘Π»ΠΎΠΊ try ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок, Ρ‚.Π΅. ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅Ρ‚ ошибок. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° except Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try.

Бинтаксис:

 ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
    # НСмного кода
ΠšΡ€ΠΎΠΌΠ΅:
    # ВыполняСтся, Ссли ошибка Π²
    # try block 

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ try ()?



  • Π‘Π½Π°Ρ‡Π°Π»Π° выполняСтся ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try i.Π΅. ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈ , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π° .
  • Если Π½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try , , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ прСдлоТСния , Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.
  • Если Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ .
  • Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ except Π² ΠΊΠΎΠ΄Π΅ Π΅Π³ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, ΠΎΠ½ΠΎ пСрСдаСтся Π²ΠΎ внСшниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ try . Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ останавливаСтся.
  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ прСдлоТСния

Код 1: Π‘Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, поэтому Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try .

Python

 ('Π”Π°! Π’Π°Ρˆ ΠΎΡ‚Π²Π΅Ρ‚:', 1) 

Код 1: Π•ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, поэтому Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€ΠΎΠΌΠ΅ , Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Python

def Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (x, y):

try :

/ / y

print ( "Π”Π°! Π’Π°Ρˆ ΠΎΡ‚Π²Π΅Ρ‚:" , Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚)

Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ 000 9000Er

9000Er

0003 ( Β«Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅! Π’Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° ноль» )

Π΄Π΅Π»ΠΈΡ‚Π΅ ( 3 , 2 )

 Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅! Π’Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° ноль 

Else Clause

Π’ python Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ else Π² Π±Π»ΠΎΠΊΠ΅ try-except, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ послС всСх ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ except.Код Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π»ΠΎΠΊ else, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Бинтаксис:

 ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
    # НСмного кода
ΠšΡ€ΠΎΠΌΠ΅:
    # ВыполняСтся, Ссли ошибка Π²
    # ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π΅Ρ‰Π΅:
    # Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ссли Π½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ 

Код:



Python3

def Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (x, y):

try :

/ / y

print ( "Π”Π°! Π’Π°Ρˆ ΠΎΡ‚Π²Π΅Ρ‚:" , Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚)

Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ 000 9000Er

9000Er

0003 ( Β«Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅! Π’Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° ноль» )

Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ( 3 , 0 )

def AbyB (a, b):

c = ((a + b) / (a - b))

000 00050004 print "a / b Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 0"

else :

print c

Aby0 , 3,0 )

AbyB ( 3,0 , 3,0 )

.0 Π’Ρ‹Ρ…ΠΎΠ΄: -9000,0 a / b ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ 0

finally ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² Python

Python прСдоставляСт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово finally, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ всСгда выполняСтся послС Π±Π»ΠΎΠΊΠΎΠ² try ΠΈ except. ПослСдний Π±Π»ΠΎΠΊ всСгда выполняСтся послС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° try ΠΈΠ»ΠΈ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° try ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Бинтаксис:

 ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
    # НСмного кода
ΠšΡ€ΠΎΠΌΠ΅:
    # ВыполняСтся, Ссли ошибка Π²
    # ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π΅Ρ‰Π΅:
    # Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ссли Π½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ:
    # НСкоторый ΠΊΠΎΠ΄ ..... (всСгда выполняСтся) 

Код:

Python3

try :

k = = = = = / / 0

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (k)

ΠΊΡ€ΠΎΠΌΠ΅ ZeroDivisionError print (

ΠΏΠΎ Π½ΡƒΠ»ΡŽ " )

Π½Π°ΠΊΠΎΠ½Π΅Ρ† :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ всСгда выполняСтся всСгда выполняСтся

Π’Ρ‹Π²ΠΎΠ΄:

 НСльзя Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ноль
Π­Ρ‚ΠΎ всСгда выполняСтся 

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ прСдоставлСна ​​ Mohit Gupta_OMG πŸ˜€ .Если Π²Π°ΠΌ нравится GeeksforGeeks, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ внСсти свой Π²ΠΊΠ»Π°Π΄, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ provide.geeksforgeeks.org ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ Π½Π° [email protected]. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ваша ΡΡ‚Π°Ρ‚ΡŒΡ появляСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС GeeksforGeeks, ΠΈ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π³ΠΈΠΊΠ°ΠΌ.
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ссли Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅, обсуТдСнной Π²Ρ‹ΡˆΠ΅.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊ! Π£ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ свои основы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python Programming Foundation ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основы.

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ собСсСдованию. Π Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ свои ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python DS . И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ своС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ МашинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ — курс Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ уровня

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ — Real Python