Π Π°Π·Π½ΠΎΠ΅

Python 3 try: Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² python. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ try — except для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ python β€” try/except ΠΈ raise

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

Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ Π±Π»ΠΎΠΊΠ°Ρ… try/except, finally ΠΈ raise. ВмСстС с Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python.

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

Рассмотрим Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ срабатывании ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Python.

3. Π‘Π»ΠΎΠΊΠΈ try/except

Если ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ, Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊ try. Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

try:
    for i in range(3):
        print(3/i)
except:
    print("Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0")
    print("Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ")

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π»Π° сообщСниС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊ except. Если Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Если ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ try ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡ‰Π΅Ρ‚ Π±Π»ΠΎΠΊ except, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½ слСдом. ΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π² try исполнСна Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Python особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, вСдь Π½ΠΈΠΊΠΎΠ³Π΄Π° нСльзя Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти.

a. НСсколько except в Python

Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° try ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Π±Π»ΠΎΠΊΠΎΠ² except. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с нСсколькими Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

a, b = 1, 0
try:
    print(a/b)
    print("Π­Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ")
    print('10'+10)
except TypeError:
    print("Π’Ρ‹ слоТили значСния нСсовмСстимых Ρ‚ΠΈΠΏΠΎΠ²")
except ZeroDivisionError:
    print("Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0")
ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ ΠΊΠ°Π½Π°Π»Ρ‹

Когда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ провСряСт Π±Π»ΠΎΠΊΠΈ except ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° try. Π’ Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСно, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚. Если ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ исполняСт этот Π±Π»ΠΎΠΊ except.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрвая инструкция ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ZeroDivisionError. Π­Ρ‚Π° ошибка обрабатываСтся Π² Π±Π»ΠΎΠΊΠ΅ except, Π½ΠΎ инструкции Π² try послС ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Π’Π°ΠΊ происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ дальнСйшиС инструкции просто ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ. И Ссли подходящий ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ Π±Π»ΠΎΠΊΠΈ except Π½Π΅ удаСтся Π½Π°ΠΉΡ‚ΠΈ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ обрабатываСтся. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Но Ссли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΊΠΎΠ΄ послС Π±Π»ΠΎΠΊΠΎΠ² except ΠΈ finally исполнится. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ.

a, b = 1, 0
try:
   print(a/b)
except:
   print("Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 0")
print("Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ это Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ?")

Рассмотрим Π²Ρ‹Π²ΠΎΠ΄:

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 0
Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ это Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ?

b. НСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ except

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ except для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ скобки. Π‘Π΅Π· Π½ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

try:
    print('10'+10)
    print(1/0)
except (TypeError,ZeroDivisionError):
    print("НСвСрный Π²Π²ΠΎΠ΄")
НСвСрный Π²Π²ΠΎΠ΄

c. ΠžΠ±Ρ‰ΠΈΠΉ except послС всСх Π±Π»ΠΎΠΊΠΎΠ² except

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ всС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ except ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ except.

try:
    print('1'+1)
    print(sum)
    print(1/0)
except NameError:
    print("sum Π½Π΅ сущСствуСт")
except ZeroDivisionError:
    print("Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 0")
except:
    print("Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ...")
Π§Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ...

Π—Π΄Π΅ΡΡŒ пСрвая инструкция Π±Π»ΠΎΠΊΠ° пытаСтся ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строки python с числом. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС TypeError. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ сталкиваСтся с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΎΠ½ провСряСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ except, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ нСльзя Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ try ΠΈ except.

try:
    print("1")
print("2")
except:
    print("3")

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ синтаксичСской ошибкС.

Но ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠ° except. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Β«default 'except:' must be lastΒ»:

try:
    print(1/0)
except:
    raise
except:
    print("Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΉΠΌΠ°Π½ΠΎ")
finally:
    print("Π₯ΠΎΡ€ΠΎΡˆΠΎ")
print("Пока")

4. Π‘Π»ΠΎΠΊ finally Π² Python

ПослС послСднСго Π±Π»ΠΎΠΊΠ° except ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ finally. Он исполняСт инструкции ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… условиях.

try:
    print(1/0)
except ValueError:
    print("Π­Ρ‚ΠΎ ошибка значСния")
finally:
    print("Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ Π² любом случаС.")
Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ Π² любом случаС.

Traceback (most recent call last):  
  File β€œ<pyshell#113>”, line 2, in <module>  
    print(1/0)
ZeroDivisionError: division by zero

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ сообщСниС с ошибкой выводится послС исполнСния Π±Π»ΠΎΠΊΠ° finally. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° просто Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ print? Но ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎ послСднСму ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π±Π»ΠΎΠΊ finally запускаСтся Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ удаСтся.

А Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ пСрСхватываСтся Π² except?

try:
    print(1/0)
except ZeroDivisionError:
    print(2/0)
finally:
    print("НичСго Π½Π΅ происходит")
НичСго Π½Π΅ происходит

Traceback (most recent call last):
  File "<pyshell#1>", line 2, in <module>
    print(1/0)
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#1>", line 4, in <module>
    print(2/0)
ZeroDivisionError: division by zero

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ finally исполняСтся Π² любом случаС.

5. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise Π² Python

Иногда Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ инструкция print Ρ‚ΡƒΡ‚ Π½Π΅ сработаСт.

raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError

РазбСрСмся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ дСлСния:

a,b=int(input()),int(input())  
if b==0:
    raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#2>", line 3, in <module>
    raise ZeroDivisionError
ZeroDivisionError

Π—Π΄Π΅ΡΡŒ Π²Π²ΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ a ΠΈ b конвСртируСтся Π² Ρ†Π΅Π»Ρ‹Π΅ числа. Π—Π°Ρ‚Π΅ΠΌ провСряСтся, Ρ€Π°Π²Π½Π° Π»ΠΈ b Π½ΡƒΠ»ΡŽ. Если Π΄Π°, Ρ‚ΠΎ вызываСтся ZeroDivisionError.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Ρ‚ΠΎ ΠΆΠ΅ самоС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΠΈ try-except? Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² ΠΊΠΎΠ΄. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ввСсти 1 ΠΈ 0, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

a,b=int(input()),int(input())
try:
    if b==0:
        raise ZeroDivisionError
except:
   print("Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0")
print("Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ это Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ?")
1
0
Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0
Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ это Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ?

Рассмотрим Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС:

raise KeyError
Traceback (most recent call last):
  File β€œ<pyshell#180>”, line 1, in <module>
    raise KeyError
KeyError

a. Raise Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise ΠΈ Π½Π΅ указывая, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. Оно Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Π»ΠΎΠΊΠ΅ except.

try:
    print('1'+1)
except:
    raise
Traceback (most recent call last):
  File β€œ<pyshell#152>”, line 2, in <module>
    print(β€˜1’+1)
TypeError: must be str, not int

b. Raise с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² Python

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π² raise. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

raise ValueError("ΠΠ΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅")
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    raise ValueError("ΠΠ΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅")
ValueError: ΠΠ΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

6. assert Π² Python

Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (assert) β€” это санитарная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° для вашСго Ρ†ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ, ΠΏΠ°Ρ€Π°Π½ΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Β«Π―Β». Оно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Python, Ссли возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ False. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ No-operation (NOP).

assert(True)

Если Π±Ρ‹ инструкция Π±Ρ‹Π»Π° False?

assert(1==0)
Traceback (most recent call last):
  File β€œ<pyshell#157>”, line 1, in <module>
    assert(1==0)
AssertionError

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

try:
    print(1)
    assert 2+2==4
    print(2)
    assert 1+2==4
    print(3)
except:
    print("assert False.")
    raise
finally:
    print("Π₯ΠΎΡ€ΠΎΡˆΠΎ")
print("Пока")

Π’Ρ‹Π²ΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

1
2
assert False.
Π₯ΠΎΡ€ΠΎΡˆΠΎ
Traceback (most recent call last):
  File β€œ<pyshell#157>”, line 5, in <module>
    assert 1+2==4
AssertionError

УтвСрТдСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ валидности Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

a. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для assert

МоТно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

assert False,"Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°"
Traceback (most recent call last):
  File β€œ<pyshell#173>”, line 1, in <module>
    assert False,”Это проблСма”
AssertionError: Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

7. ОбъявлСниС собствСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python

НаконСц, рассмотрим процСсс создания собствСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Для этого создадим Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ· класса Exception. ΠŸΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

class MyError(Exception):
    print("Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°")

raise MyError("ошибка MyError")
Traceback (most recent call last):
  File β€œ<pyshell#179>”, line 1, in <module>
    raise MyError(β€œΠΎΡˆΠΈΠ±ΠΊΠ° MyError”)
MyError: ошибка MyError

Π’ΠΎΡ‚ ΠΈ всС, Ρ‡Ρ‚ΠΎ касаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python.

8. Π’Ρ‹Π²ΠΎΠ΄: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python

Благодаря этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ смоТСтС ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ своСму ΠΊΠΎΠ΄Ρƒ. ВсС благодаря возмоТности ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python, ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ создания собствСнных.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python 3 (try-except-else) β€” ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ…

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

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

На сСгодняшний дСнь принято Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок:

  • БинтаксичСскиС – Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΈΠ·-Π·Π° синтаксичСских ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΊΠΎΠ΄Π°;
  • ЛогичСскиС – ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ вслСдствиС логичСских нСточностСй Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅;
  • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ – Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ дСйствиями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ систСмы.

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

print("Hello World!)

ПослС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ запуска выдастся тСкст ошибки:

  File "main.py", line 1
    print("Hello World!)
                       ^
SyntaxError: EOL while scanning string literal

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

def avg(a, b):
    return a + b / 2
print(avg(10, 20))

20

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

print(10 / 0)

ПослС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ запуска Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ:

Traceback (most recent call last):
File "main.py", line 1, in <module>
print(10 / 0)
ZeroDivisionError: division by zero

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибки Π½Π° экран. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС отобраТаСтся Ρ„Π°ΠΉΠ», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ZeroDivisionError. НиТС приводится ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

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

print("Program started")
print("Opening file...")
f = open("data.txt")
print("Program finished")

ПослС запуск Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ:

Program started
Opening file...
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    f = open("data.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»Π° с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π° ТСстком дискС Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сгСнСрировала ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ FileNotFoundError, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅Π΅ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ с Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ. ПослСдняя строка ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обозначаСтся Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ Π±Ρ‹Π»Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° экранС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, прСдусмотрСнныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΡΠ²ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Python конструкции try-except. Она позволяСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π±Π΅Π· нСобходимости Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

print("Program started")
try:
    print("Opening file...")
    f = open("data.txt")
except:
    print("File not found!")
print("Program finished")

Program started
Opening file...
File not found!
Program finished

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅, Π±Π»ΠΎΠΊ try содСрТит опасный ΠΊΠΎΠ΄, способный привСсти ΠΊ ошибкС (отсутствиС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°), Π° Π±Π»ΠΎΠΊ except Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΠ²ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ссли Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ станСт Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ, ΠΎ Ρ‡Π΅ΠΌ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ послСдний Π²Ρ‹Π²ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print.

НСсколько блоков except

Π‘Π»ΠΎΠΊΠΎΠ² except ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сначала ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ частныС случаи, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠ΅:

print("Program started")
try:
    print("Opening file...")
    f = open("data.txt")
except FileNotFoundError:
    print("File not found!")
except Exception:
    print("Something gone wrong!")
print("Program finished")

Program started
Opening file...
File not found!
Program finished

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΈ else

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

Π’Π°ΠΊΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция else, которая выполняСтся Π² случаС, Ссли Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС – else сработаСт ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ write. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ» открываСтся Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π² тСкстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ β€œw”. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ„Π°ΠΉΠ» открываСтся Π½Π° запись. Если Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π±Ρ‹Π»ΠΎ – создаСтся Π½ΠΎΠ²Ρ‹ΠΉ, Ссли Π±Ρ‹Π» – пСрСзаписываСтся.

print("Program started")
try:
    print("Opening file...")
    f = open("data.txt", "w")
    try:
        print("Writing to file...")
        f.write("Hello World!")
    except Exception:
        print("Something gone wrong!")
    else:
        print("Success!")
except FileNotFoundError:
    print("File not found!")
print("Program finished")

Program started
Opening file...
Writing to file...
Success!
Program finished

finally

Π‘Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ дСйствия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π»ΠΎΠΊ finally, содСрТащий Π½Π°Π±ΠΎΡ€ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² любом случаС. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, добавляя Π² Π½Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ»:

print("Program started")
try:
    print("Opening file...")
    f = open("data.txt", "w")
    try:
        print("Writing to file...")
        f.write("Hello World!")
    except Exception:
        print("Something gone wrong!")
    else:
        print("Success!")
    finally:
        print("Closing file...")
        f.close()
except FileNotFoundError:
    print("File not found!")
print("Program finished")

Program started
Opening file...
Writing to file...
Success!
Closing file...
Program finished

Иногда Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с тСкстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слишком слоТным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚, выглядит Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого сущСствуСт конструкция with/as, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сокращаСтся Π΄Π»ΠΈΠ½Π° написанного ΠΊΠΎΠ΄Π°:

print("Program started")
try:
    print("Writing to file...")
    with open("data.txt", "w") as f:
        f.write("Hello World!")
except Exception:
    print("Something gone wrong!")
print("Program finished")

Program started
Writing to file...
Program finished

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

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ

Python позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΆΠ΅ рассмотрим Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½ΡƒΠΆΠ½Ρ‹Ρ… ситуациях, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Python присутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Для этого примСняСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise. Π‘Π»Π΅Π΄ΠΎΠΌ Π·Π° Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Exception, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… конструкций try-except, ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

print("Program started")
try:
    raise Exception("User Exception!")
except Exception as e:
    print(str(e))
print("Program finished")

Program started
User Exception!
Program finished

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс, унаслСдованный ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Exception. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ особыС Π²ΠΈΠ΄Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ соотвСтствуСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ конструкторС Exception ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ тСкст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ сработало ΠΈ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ str.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ NegativeAge, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ввСсти ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ возраст. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, экран Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

class NegativeAge(Exception):
    pass
print("Program started")
try:
    age = int(input("Enter your age: "))
    if age < 0:
        raise NegativeAge("Exception: Negative age!")
    print("Success!")
except NegativeAge as e:
    print(e)
print("Program finished")

Program started
Enter your age: -18
Exception: Negative age!
Program finished

Π—Π°ΠΏΠΈΡΡŒ Π² Π»ΠΎΠ³

Для Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сообщСний, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Python примСняСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π»ΠΎΠ³ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Сю, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„Π°ΠΉΠ»Π°. БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² Π»ΠΎΠ³ΠΎΠ², ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°, опрСдСлСнная Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

import logging
logging.basicConfig(level = logging.DEBUG)
logging.debug("Debug message!")
logging.info("Info message!")
logging.warning("Warning message!")
logging.error("Error message!")
logging.critical("Critical message!")

DEBUG:root:Debug message!
INFO:root:Info message!
WARNING:root:Warning message!
ERROR:root:Error message!
CRITICAL:root:Critical message!

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ доступны Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ сообщСний, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, информация ΠΈΠ»ΠΈ ошибка. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ лишний тСкст Π² консоль.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ logging Π½Π° Python ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Π»ΠΎΠ³ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΠΎΠ³ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ», Π·Π°Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ log.txt. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ INFO ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сообщСния ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½ΠΈΠΆΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС debug) Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π»ΠΎΠ³Π΅. Python позволяСт Π² try-except ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ тСкст ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ запишСм:

import logging
logging.basicConfig(filename="log.txt", level = logging.INFO)
try:
    print(10 / 0)
except Exception as e:
    logging.error(str(e))

Π’ log .txt Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° строка сообщСния ΠΎ Ρ‚ΠΈΠΏΠ΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€œERROR:root:division by zero”.

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π’ языкС программирования Python присутствуСт строгая иСрархия ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ являСтся BaseException, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π² сСбя всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ разновидности ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

  • SystemExit – Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sys.exit;
  • KeyboardInterrupt – ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ;
  • GeneratorExit – появляСтся ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° generator;
  • Exception – прСдставляСт ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… нСсистСмных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ нСсистСмных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТит Π² сСбС класс Exception ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ВсС ΠΎΠ½ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ для послСднСй Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ вСрсии Python 3.

НазваниСΠ₯арактСристика
ArithmeticErrorΠŸΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ арифмСтичСскими ошибками (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ числовой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль)
AssertionErrorΠ’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π»ΠΎΠΆΠ½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assert
AttributeErrorΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° отсутствуСт
BufferErrorΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
EOFErrorΠŸΡ€ΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° функция Π½Π΅ смогла ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°
ImportErrorΠ‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ модуля Π»ΠΈΠ±ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°
LookupErrorΠ˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡ Π² массивС
MemoryErrorΠ’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ситуации, ΠΊΠΎΠ³Π΄Π° доступной памяти нСдостаточно
NameErrorΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ поискС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
NotImplementedErrorΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² классах-наслСдниках
OSErrorΠ’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя систСмныС ошибки (отсутствиС доступа ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с поиском процСссов)
ReferenceErrorΠŸΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ со слабой ссылкой
RuntimeErrorΠ‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ классифицируСтся
StopIterationΠ’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ next ΠΏΡ€ΠΈ отсутствии элСмСнтов
SyntaxErrorΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ синтаксичСских ошибок
SystemErrorΠŸΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ошибками систСмы
TypeErrorΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ опСрация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ
UnicodeErrorΠ‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ символов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
ValueErrorΠ’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ значСния для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
WarningΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

Как Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 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 3: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ: try, except, finally, else

На этом занятии ΠΌΡ‹ с Π²Π°ΠΌΠΈ сдСлаСм Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ
– ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅
элСмСнта ΠΈΠ· пустого списка:

Ρ‚ΠΎ Ρƒ нас ΠΎΠ½
Π²Ρ‹Π·Ρ‹Π²Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ IndexError, Ρ‚.ΠΊ. ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ Π½Π΅Ρ‡Π΅Π³ΠΎ. Или ΠΆΠ΅,
Π±ΠΎΠ»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль:

Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ
ошибкС ZeroDivisionError. Или Ρ‚Π°ΠΊΠΈΠ΅
ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

int("12abc") #ValueError
"2"+5 #TypeError

И Ρ‚Π°ΠΊΠΈΡ… ситуаций
масса. ВсС эти ошибки Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…
ситуаций, ΠΈΠ»ΠΈ попросту – ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Π°ΠΊΠΈΡ… стандартных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
ΠΌΡ‹ здСсь ΠΈ рассмотрим.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅
ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас имССтся Π²ΠΎΡ‚ такая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для вычислСния дСлСния Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ…
чисСл:

x = input("x: ")
y = input("y: ")
x = int(x)
y = int(y)
Β 
res = x/y
print(res)

Если ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ
Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа, Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π½ΠΎ Ссли ввСсти Π² качСствС
ΠΈΠ³Ρ€Π΅ΠΊΠ° ноль ΠΈΠ»ΠΈ Π½Π΅ Ρ‡ΠΈΡΠ»ΠΎΠ²ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’Π°ΠΊ
Π²ΠΎΡ‚, Π² Python Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ
для отслСТивания (отлавливания) Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого
критичСский ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊ try:

try:
Β Β Β  x = int(x)
Β Β Β  y = int(y)
Β 
Β Β Β  res = x/y
except ZeroDivisionError:
    res = "дСлСниС на ноль"
print(res)

А послС нСго
Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ except ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅
ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΄Π΅Π»Π΅Π½ΠΈΠ΅
Π½Π° ноль, Ρ‚.Π΅. ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ZeroDivisionError. Π”Π°Π²Π°ΠΉΡ‚Π΅
запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ посмотрим ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’Π²ΠΎΠ΄ΠΈΠΌ 1 ΠΈ 0,
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ ΠΈ Π² консоли Π²ΠΈΠ΄ΠΈΠΌ сообщСниС Β«Π΄Π΅Π»Π΅Π½ΠΈΠ΅
на ноль».

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ
Π±Π»ΠΎΠΊ try except Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ.
Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try. Если всС
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Π±Π»ΠΎΠΊΠ° except ΠΈ ΠΎΠ½
пропускаСтся, Π½Π΅ выполняСтся. И Π΄Π°Π»Π΅Π΅ ΡƒΠΆΠ΅ вызываСтся функция print ΠΈ пСчатаСтся
ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если ΠΆΠ΅ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π»ΠΎΠΊΠ° try Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚
ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (любоС), Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрываСтся ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅
пСрСдаСтся Π±Π»ΠΎΠΊΡƒ except с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Если
Π½ΡƒΠΆΠ½ΠΎΠ΅ имя Π² Π±Π»ΠΎΠΊΠ΅ except отсутствуСт, Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π°
Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊ срСдС выполнСния Python). И Π² случаС
отсутствия ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ считаСтся Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ (unhandled
exception) ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ Π²
блокС try нСсколько
Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ послС
ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова except:

except (ZeroDivisionError, ValueError):
Β Β Β  res = "Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль ΠΈΠ»ΠΈ нСчисловоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"

Или, для
Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ… except:

except ZeroDivisionError:
    res = "дСлСниС на ноль"
except ValueError:
Β Β Β  res = "ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ число"

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ
ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ слуТСбноС сообщСниС, записанноС Π²
ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ…, Ρ‚ΠΎ это дСлаСтся Ρ‚Π°ΠΊ:

except ZeroDivisionError as z:
Β Β Β  res = z
except ValueError as v:
Β Β Β  res = v

Π’ΠΎ Π΅ΡΡ‚ΡŒ, послС
ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, это класс, Π½ΠΎ ΠΌΡ‹ ΠΎ Π½ΠΈΡ… ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅
Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, поэтому Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ просто ΠΊΠ°ΠΊ имя) ставится ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅
слово as и дальшС
пСрСмСнная, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° класс ValueError, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится
слуТСбноС сообщСниС ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ошибкС. Выводя Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ print, ΠΌΡ‹ Π² консоли
Π²ΠΈΠ΄ΠΈΠΌ это сообщСниС.

Π”Π°Π»Π΅Π΅, Π±Π»ΠΎΠΊ try ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚
Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ else, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся ΠΏΡ€ΠΈ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°
Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π°
Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок. НапримСр, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

else:
Β Β Β  print("Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ")

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ
запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, вводя ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ числа, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ это сообщСниС. Если ΠΆΠ΅
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ любоС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ этот Π±Π»ΠΎΠΊ Π½Π΅ выполняСтся.

Π”Ρ€ΡƒΠ³ΠΈΠΌ
Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ являСтся Π±Π»ΠΎΠΊ finally, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ,
Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, выполняСтся всСгда послС Π±Π»ΠΎΠΊΠ° try, Π²Π½Π΅
зависимости ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΈΠ»ΠΈ Π½Π΅Ρ‚:

finally:
Β Β Β  print("Π‘Π»ΠΎΠΊ finally выполняСтся всСгда")

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ
запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΡ‹ всСгда Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ это сообщСниС. И здСсь часто
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ этот Π±Π»ΠΎΠΊ, Ссли ΠΎΠ½ выполняСтся всСгда послС try? ΠœΡ‹ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅
успСхом ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ этот print сразу послС
этого Π±Π»ΠΎΠΊΠ° ΠΈ, Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹, всС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅? Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅Ρ‚. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅,
Ссли ΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ±Π΅Ρ€Π΅ΠΌ Π±Π»ΠΎΠΊ except с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ValueError, запустим
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ нСчисловыС значСния, Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅
ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ этом, Π±Π»ΠΎΠΊ finally всС Ρ€Π°Π²Π½ΠΎ выполнился! Π­Ρ‚ΠΎΠ³ΠΎ Π½Π΅
ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π±Ρ‹, Ссли просто Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ print послС try.

Или, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ
ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

def getValues():
Β Β Β  x = input("x: ")
Β Β Β  y = input("y: ")
Β Β Β  try:
Β Β Β Β Β Β Β  x = int(x)
Β Β Β Β Β Β Β  y = int(y)
Β Β Β Β Β Β Β  return x,y
Β Β Β  except ValueError as v:
Β Β Β Β Β Β Β  print(v)
Β Β Β Β Β Β Β  return 0,0
Β Β Β  finally:
Β Β Β Β Β Β Β  print("finally выполняСтся Π΄ΠΎ return")
Β 
x,y = getValues()
print(x,y)

ΠœΡ‹ создаСм
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π²Π²ΠΎΠ΄Π° Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ finally Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ
сообщСниС. Π­Ρ‚ΠΈΠΌ сообщСниСм ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ этот Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² return, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…
Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НаконСц, ΠΌΡ‹
ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ except Π±Π΅Π· указания ΠΈΠΌΠ΅Π½ΠΈ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

x = input("x: ")
y = input("y: ")
try:
Β Β Β  x = int(x)
Β Β Β  y = int(y)
Β 
Β Β Β  res = x/y
except:
Β Β Β  print("ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅")
else:
Β Β Β  print("Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ")
finally:
Β Β Β  print("Π‘Π»ΠΎΠΊ finally выполняСтся всСгда")
Β 
print(res)

Π’ этом случаС
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ print(«ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅») Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ…
ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² Π±Π»ΠΎΠΊΠ΅ try, Π½ΠΎ само ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚.Π΅.
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚
Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹
здСсь рассмотрСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ отслСТиваниС стандартных (встроСнных) классов
ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ свои ΠΈ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ довольно Π³ΠΈΠ±ΠΊΠΈΠ΅
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций. Но для углублСния Π² этот
ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Π½ΡƒΠΆΠ½ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основы ООП Π² Python. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹
ΠΏΠΎΠΊΠ° Π½Π° этом остановимся, ΠΈ Π² качСствС Π·Π°Π΄Π°Π½ΠΈΠΉ для самоподготовки ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅
ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Задания для самоподготовки

1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Π²ΠΎΠ΄Π° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈ прСобразования этой строки Π²
список Ρ†Π΅Π»Ρ‹Ρ… чисСл. (Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ здСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ map для
прСобразования элСмСнтов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ строк Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл).
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ.

2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния срСднСго арифмСтичСского элСмСнтов ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ списка.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅.

3. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ (с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° yield) для удалСния
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· мноТСства (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° pop()). Ѐункция
Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ…
ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций Π² Python

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

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ скрипт. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ число ΠΈ Π΄Π΅Π»ΠΈΡ‚ сто Π½Π° это число:

a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число "))
print(100 / a)

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π΄Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‚ΠΎ всС сработаСт ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡƒΡ‡Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π° ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя.

А Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ случится, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ попытаСтся ΠΏΠΎΠ»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π§Π΅ΠΌ слоТнСС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‚Π΅ΠΌ большС Ρƒ Π½Π΅Π΅ уязвимых мСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ придСтся ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Python ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций.

Уязвимый ΠΊΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π±Π»ΠΎΠΊ try, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π±Π»ΠΎΠΊ except, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ возмоТная ошибка ΠΈ рСакция Π½Π° Π½Π΅Π΅:

try:
    a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число:"))
except ValueError:
    print ("Π­Ρ‚ΠΎ Π½Π΅ число!")

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² Ρ‚ΠΈΠΏ float, Ссли ΠΆΠ΅ ΠΏΡ€ΠΈ этом Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка класса ValueError, Ρ‚ΠΎ выводится строка «This is not a valid number». Π’ Π±Π»ΠΎΠΊΠ΅ except ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ классы ошибок Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ класс ошибок, Ρ‚ΠΎ Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π»ΡŽΠ±ΡƒΡŽ Π²ΠΎΠ·Π½ΠΈΠΊΡˆΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π‘Π»ΠΎΠΊ try ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Π±Π»ΠΎΠΊΠΎΠ² except:

try:
    a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    print (100 / a)
except ValueError:
    print ("Π­Ρ‚ΠΎ Π½Π΅ число")
except ZeroDivisionError:
    print ("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя")

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ пустой Π±Π»ΠΎΠΊ except, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΡƒΡΡ‚ΠΎΠΉ Π±Π»ΠΎΠΊ except всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ послСдним:

try:
    a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    print (100 / a)
except ValueError:
    print ("Π­Ρ‚ΠΎ Π½Π΅ число!")
except ZeroDivisionError:
    print ("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя!")
except:
    print ("НСоТиданная ошибка.")

Π‘Π»ΠΎΠΊΡƒ except ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ else, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сработаСт Π² случаС, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ Π±Π΅Π· ошибок:

try:
    a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    print (100 / a)
except ValueError:
    print ("Π­Ρ‚ΠΎ Π½Π΅ число!")
except ZeroDivisionError:
    print ("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя!")
except:
    print ("НСоТиданная ошибка.")
else:
    print ("Код выполнился Π±Π΅Π· ошибок")

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Π’Π°ΠΊΠΆΠ΅ Ρƒ Π±Π»ΠΎΠΊΠ° except Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ finally, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сработаСт нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, выполнился ΠΊΠΎΠ΄ с ошибками ΠΈΠ»ΠΈ Π±Π΅Π·:

try:
    a = float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: ")
    print (100 / a)
except ValueError:
    print ("Π­Ρ‚ΠΎ Π½Π΅ число!")
except ZeroDivisionError:
    print ("На ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя!")
except:
    print ("НСоТиданная ошибка.")
else:
    print ("Код выполнился Π±Π΅Π· ошибок")
finally:
    print ("Π― Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡΡŒ Π² любом случаС!")

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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python с использованиСм инструкций try, except ΠΈ finally

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

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python

Π’ языкС Python сущСствуСт мноТСство встроСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сталкиваСтся с ошибкой (Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ).

Когда Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python останавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΌΡƒ, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Если Π΅Π³ΠΎ Π½Π΅ удаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ функция А, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π’, которая Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C, Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ B ΠΈ Π΄Π°Π»Π΅Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ А.

Если это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ своС исполнСниС ΠΈ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python

Π’ Python ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструкции try.

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ опСрация, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, помСщаСтся Π²Π½ΡƒΡ‚Ρ€ΡŒ Π±Π»ΠΎΠΊΠ° try. А ΠΊΠΎΠ΄, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, β€” Π²Π½ΡƒΡ‚Ρ€ΡŒ Π±Π»ΠΎΠΊΠ° except.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

# Для получСния Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ sys
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:
The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†ΠΈΠΊΠ»Π° for, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ списка randomList. Как ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ошибка, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try.

Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Π±Π»ΠΎΠΊ except пропускаСтся, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ выполнятся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊ происходит с послСдним элСмСнтом списка). Но Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ появляСтся, ΠΎΠ½ΠΎ сразу обрабатываСтся Π² Π±Π»ΠΎΠΊΠ΅ except (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊ происходит с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ элСмСнтом списка).

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²Ρ‹Π²Π΅Π»ΠΈ Π½Π° экран имя ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exc_info(), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΠ· модуля sys. МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ элСмСнт a Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ValueError,Β Π°Β 0 Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ZeroDivisionError.

Π’Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Exception, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ наш ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# Для получСния Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ sys
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except Exception as e:
        print("Oops!", e.__class__, "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния этого ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π΅ спСцифицировали ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠ΅ except.

Π‘ практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния это Π½Π΅Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡ… Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρƒ ΠΎΠ΄Π½ΠΎΠΉ инструкции try ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π±Π»ΠΎΠΊΠΎΠ² except, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° except, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ псСвдокод:

try:
   # do something
   pass

except ValueError:
   # handle ValueError exception
   pass

except (TypeError, ZeroDivisionError):
   # handle multiple exceptions
   # TypeError and ZeroDivisionError
   pass

except:
   # handle all other exceptions
   pass

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

Π’ Python ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. Но ΠΌΡ‹ ΠΈ сами ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ raise.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ значСния Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt

>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument

>>> try:
...     a = int(input("Enter a positive integer: "))
...     if a <= 0:
...         raise ValueError("That is not a positive number!")
... except ValueError as ve:
...     print(ve)
...    
Enter a positive integer: -2
That is not a positive number!

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ try с Π±Π»ΠΎΠΊΠΎΠΌ else

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² случаС, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ else вмСстС с инструкциСй try.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Π² самом Π±Π»ΠΎΠΊΠ΅ else, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π΅ΠΌΡƒ Π±Π»ΠΎΠΊΠ΅ except.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл

try:
    num = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: "))
    assert num % 2 == 0
except:
    print("Число Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅!")
else:
    reciprocal = 1/num
    print(reciprocal)
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Если ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число:

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 1
Число Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅!

А Ссли Π²Π²ΠΎΠ΄ΠΈΠΌ Ρ‡Π΅Ρ‚Π½ΠΎΠ΅, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π΅ΠΌΡƒ число вычисляСтся ΠΈ выводится Π½Π° экран.

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 4
0.25

Однако, Ссли ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ 0, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ ZeroDivisionError, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ else Π½Π΅ обрабатываСтся Π² ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π΅ΠΌΡƒ Π±Π»ΠΎΠΊΠ΅ except.

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 0
Traceback (most recent call last):
  File "<string>", line 7, in <module>
    reciprocal = 1/num
ZeroDivisionError: division by zero

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ try…finally

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ try ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ finally. Π­Ρ‚ΠΎΡ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² любом случаС ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для освобоТдСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов.

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Ρƒ, ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ с GUI (Graphical User Interface β€” графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ).

Π’ΠΎ всСх Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ эти рСсурсы Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ВсС эти дСйствия (Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ GUI, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСти) ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ finally, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… исполнСниС.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ„Π°ΠΉΠ»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ это:

try:
   f = open("test.txt",encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

Вакая конструкция Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ Π² любом случаС, ΠΊΠ°ΠΊΠΎΠ΅ Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Python Try-Except

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ try-except β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ познакомимся с Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌΠΈ использования try-except Π² Python.

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

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ try-except ΠΈ try-except-else ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ. НапримСр, ΠΊΠΎΠ΄ Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ LBYL (Look before you leap), ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡŽ условий. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ случаС ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ try-except.

Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π° зависит ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΊΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ os.path.exists ΠΈΠ»ΠΈ Queue.full, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°ΡŽΡ‚ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΈΡ… использования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ try-except-else.

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

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для управлСния ошибками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, доступС ΠΊ сСти ΠΈ Ρ‚.Π΄.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ β€” это искусство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² написании Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΈ качСствСнного ΠΊΠΎΠ΄Π°.

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

Иногда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ способ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния ΠΎΠ± ошибкС.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python. Π’ΠΎ врСмя тСстирования Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try.

try:
#вашкод
exceptExceptionas ex:
print(ex)

МоТно ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ except.

except(Exception1,Exception2)as e:
pass

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Python 2.6 / 2.7 Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ запятой. Но этого нСльзя Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Python 3. ВмСсто этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово [as].

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

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

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ except:

try:
file= open('input-file','open mode')
exceptEOFErroras ex:
print("Caught the EOF error.")
raise ex
exceptIOErroras e:
print("Caught the I/O error.")
raiseex

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

try:
file= open('input-file','open mode')
except:
# In case of any unhandled error, throw it away
raise

ПослСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Ρƒ вас Π½Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ.

ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹. Но ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ условиС except, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ² [raise] Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ.

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

try:
# ΠΠ°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
raiseException('I learn Python!')
except:
print("Entered in except.")
# ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
raise

Π’Ρ‹Π²ΠΎΠ΄:

Enteredinexcept.
Traceback(most recent call last):
File"python", line 3,in<module>
Exception: I learn Python!

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

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

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» while Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ бСсконСчно. Код Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Π·Π°Ρ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ [int()]. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π±Π»ΠΎΠΊ except Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ else.

whileTrue:
# Π’Π²Π΅Π΄Π΅Ρ‚Π΅ с консоли Ρ†Π΅Π»ΠΎΠ΅ число.
    x =int(input())

# Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ 1 Π½Π° x, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ
try:
result=1/ x
except:
print("Error case")
exit(0)
else:
print("Pass case")
exit(1)

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

Ошибка пСрСхватываСтся условиСм try. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ except, выполняСтся инструкции Π² [finally].

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

try:
# НамСрСнно Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
    x =1/0
except:
# УсловиСExcept:
print("Error occurred")
finally:
# УсловиСFinally:
print("The [finally clause] is hit")

Π’Ρ‹Π²ΠΎΠ΄:

Error occurred
The[finally clause]is hit

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ <identifier> ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IOError, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ условия.

try:
# НамСрСнно Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
    f = open("no-file")
exceptIOErroras err:
# БоздаСмэкзСмпляр IOError дляучСта.
print("Error:", err)
print("Code:",err.errno)

Π’Ρ‹Π²ΠΎΠ΄:

('Error:',IOError(2,'No such file or directory'))
('Code:',2)

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

НС рСкомСндуСтся:

defbad_exception():
try:
raiseValueError('Intentional - do not want this to get caught')
raiseException('Exception to be handled')
exceptExceptionas 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:
raiseValueError('Testing exceptions: The input is in incorrect order','one','two','four')
exceptValueErroras err:
print(err.args)

Π’Ρ‹Π²ΠΎΠ΄:

('Testing exceptions: The input is in incorrect order','one','two','four')

Π›ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ. Но Ссли это Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

try:
assertFalse
exceptAssertionError:
pass
print('Welcome to Prometheus!!!')

Π’Ρ‹Π²ΠΎΠ΄:

Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

РаспространСнныС ошибки ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

  • IOError–возникаСт, Ссли Ρ„Π°ΠΉΠ» Π½Π΅ открываСтся.
  • ImportError β€” Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ python Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½.
  • ValueError β€” Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ с Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
  • KeyboardInterrupt β€” ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π° DelΠΈΠ»ΠΈ Ctrl-C.
  • EOFError β€” ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ input() / raw_input()Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° (EOF), Π½ΠΎ Π±Π΅Π· чтСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ распространСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

exceptIOError:
print('Error occurred while opening the file.')

exceptValueError:
print('Non-numeric input detected.')

exceptImportError:
print('Unable to locate the module.')

exceptEOFError:
print('Identified EOF error.')

exceptKeyboardInterrupt:
print('Wrong keyboard input.')

except:
print('An error occurred.')

Π’ процСссС программирования ошибки Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹. Но ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ конструкции try-except ΠΈΠ»ΠΈ try-except-else, try-except-finally.

Данная публикация прСдставляСт собой ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«How To Best Use Try Except In Python – Especially For BeginnersΒ» , ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π΄Ρ€ΡƒΠΆΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.Ρ€Ρƒ

Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ ΠΊΠ°Π½Π°Π». Подпишись, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!

8. Ошибки ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ — докумСнтация Python 3.9.0

Π”ΠΎ сих ΠΏΠΎΡ€ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π½Π΅ Π±Ρ‹Π»ΠΎ большС, Ρ‡Π΅ΠΌ Π±Ρ‹Π»ΠΎ упомянуто, Π½ΠΎ Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ
ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹, вСроятно, Π²ΠΈΠ΄Π΅Π»ΠΈ. Π•ΡΡ‚ΡŒ (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ) Π΄Π²Π°
Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹Π΅ Π²ΠΈΠ΄Ρ‹ ошибок: синтаксичСских ошибок ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ .

8.1. Ошибки синтаксиса

БинтаксичСскиС ошибки, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ошибки синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΡΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнным Π²ΠΈΠ΄ΠΎΠΌ
ΠΆΠ°Π»ΠΎΠ±Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅, ΠΏΠΎΠΊΠ° ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚Π΅ Python:

 >>> while True print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€')
  Π€Π°ΠΉΠ» "", строка 1
    Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ True print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€')
                   ^
SyntaxError: нСдопустимый синтаксис
 

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ повторяСт ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ строку ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ «стрСлку», ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π°
самая ранняя Ρ‚ΠΎΡ‡ΠΊΠ° Π² строкС, Π³Π΄Π΅ Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ошибка.Ошибка
Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ (ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ) Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ , ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ стрСлкС: Π²
НапримСр, ошибка ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print () , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅
( ':' ) отсутствуСт ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ. Имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‚ΡΡ, поэтому Π²Ρ‹
Π·Π½Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ, Ссли Π²Π²ΠΎΠ΄ поступил ΠΈΠ· сцСнария.

8.2. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

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

 >>> 10 * (1/0)
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
ZeroDivisionError: дСлСниС на ноль
>>> 4 + спам * 3
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
NameError: имя 'spam' Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ
>>> '2' + 2
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
TypeError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ int Π² str
 

ПослСдняя строка сообщСния ΠΎΠ± ошибкС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΈ Ρ‚ΠΈΠΏ пСчатаСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ сообщСния: Ρ‚ΠΈΠΏΡ‹ Π²
ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ZeroDivisionError

.

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
print (x)
except NameError:
print («Variable 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:
Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ («Πš соТалСнию, Π½ΠΈΠΆΠ΅ Π½Π΅Ρ‚ чисСл
ноль «)

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

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

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

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

Π’Ρ‹Π·ΠΎΠ² TypeError, Ссли x Π½Π΅ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом:

x = «hello»

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

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


.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try, except ΠΈ finally

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python

Python ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство встроСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ).

Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ эти ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python останавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ процСссу Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½. Если Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· строя.

НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρƒ нас Π΅ΡΡ‚ΡŒ функция A , которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ B , которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ C .Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C , Π½ΠΎ Π½Π΅ обрабатываСтся Π² C , ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ B , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊ A .

Если Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, отобраТаСтся сообщСниС ΠΎΠ± ошибкС, ΠΈ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ останавливаСтся.


ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python

Π’ Python ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try .

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ опСрация, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, помСщаСтся Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try .Код, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, записан Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π° .

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ послС обнаруТСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  # import module sys, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
import sys

randomList = ['Π°', 0, 2]

для записи в randomList:
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        print ("Π—Π°ΠΏΠΈΡΡŒ Π΅ΡΡ‚ΡŒ", запись)
        r = 1 / int (запись)
        ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ
    ΠšΡ€ΠΎΠΌΠ΅:
        print («Ой!Β», sys.exc_info () [0], Β«ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.Β»)
        print ("Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись.")
        Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ()
print ("ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΎΡ‚", entry, "is", r)  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π—Π°ΠΏΠΈΡΡŒ
Ой!  ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π».
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись.

Π—Π°ΠΏΠΈΡΡŒ 0
Ой!  ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π».
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись.

Π—Π°ΠΏΠΈΡΡŒ 2
ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ 2 Ρ€Π°Π²Π½ΠΎ 0,5  

.

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ просматриваСм значСния списка randomList . Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Ρ‡Π°ΡΡ‚ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, помСщаСтся Π² Π±Π»ΠΎΠΊ try .

Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Π±Π»ΠΎΠΊ , ΠΊΡ€ΠΎΠΌΠ΅ , пропускаСтся ΠΈ продолТаСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (для послСднСго значСния). Но Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ пСрСхватываСтся , ΠΊΡ€ΠΎΠΌΠ΅ Π±Π»ΠΎΠΊΠ° (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ значСния).

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ имя ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exc_info () Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля sys . ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ a Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ValueError , Π° 0 Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ZeroDivisionError .

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Exception , ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  # import module sys, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
import sys

randomList = ['Π°', 0, 2]

для записи в randomList:
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        print ("Π—Π°ΠΏΠΈΡΡŒ Π΅ΡΡ‚ΡŒ", запись)
        r = 1 / int (запись)
        ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ
    ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ e:
        print ("Ой!", e.__class__, "ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ".)
        print ("Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись.")
        Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ()
print ("ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΎΡ‚", entry, "is", r)  

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.


ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ особых ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Python

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π΅ упомянули Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² , ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° .

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС случаи ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ , ΠΊΡ€ΠΎΠΌΠ΅ прСдлоТСния .

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ try ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любоС количСство , ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² случаС возникновСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ except. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ псСвдокода.

  ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
   # сдСлай Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ
   ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

ΠΊΡ€ΠΎΠΌΠ΅ ValueError:
   # ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError
   ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

except (TypeError, ZeroDivisionError):
   # ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
   # TypeError ΠΈ ZeroDivisionError
   ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

ΠšΡ€ΠΎΠΌΠ΅:
   # ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
   ΠΏΠ΅Ρ€Π΅Π²Π°Π»  

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

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Python ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок Π²ΠΎ врСмя выполнСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise .

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ значСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ возникновСния этого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

  >>> ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ KeyboardInterrupt
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
...
KeyboardInterrupt

>>> ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ MemoryError ("Π­Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚")
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
...
MemoryError: это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

>>> ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
... a = int (input ("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число:"))
...Ссли a <= 0:
... ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ValueError ("Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число!")
... ΠΊΡ€ΠΎΠΌΠ΅ ValueError as ve:
... ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π²Π΅)
...
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число: -2
Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число!  

Python ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ else

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Ссли Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ try ΠΏΡ€ΠΎΡˆΠ΅Π» Π±Π΅Π· ошибок. Π’ этих случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово else с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ try .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ else Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… except.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  # ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл

ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
    num = int (input ("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число:"))
    ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ число% 2 == 0
ΠšΡ€ΠΎΠΌΠ΅:
    print («НС Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число!Β»)
Π΅Ρ‰Π΅:
    ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ = 1 / число
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (обратная)  

Π’Ρ‹Ρ…ΠΎΠ΄

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число:

  Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 1
НС Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число!  

Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число, вычисляСтся ΠΈ отобраТаСтся обратная Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°.

  Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 4
0,25  

Однако, Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ 0, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ZeroDivisionError Π² качСствС Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ , ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅ обрабатываСтся ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ .

  Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 0
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» Β«<строка>Β», строка 7, Π² <ΠΌΠΎΠ΄ΡƒΠ»Π΅>
    ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ = 1 / число
ZeroDivisionError: дСлСниС на ноль  

Python ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ... Π½Π°ΠΊΠΎΠ½Π΅Ρ†

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ finally .Π­Ρ‚ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚ выполняСтся нСсмотря Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для освобоТдСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов.

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI).

Π’ΠΎ всСх этих ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ рСсурс Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° остановится нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ½Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΈ дСйствия (Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, графичСский интСрфСйс ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСти) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ finally , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это.

  ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:
   f = open ("test.txt", encoding = 'utf-8')
   # Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
Ну Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ‚ΠΎ:
   f.close ()  

Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ конструкции обСспСчиваСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π΄Π°ΠΆΠ΅ Π² случаС возникновСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *