πŸ”§ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python: пошаговоС руководство 🐍

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python?

Π’ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова raise. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся подклассом встроСнного класса Exception ΠΈΠ»ΠΈ Π΅Π³ΠΎ подклассов.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:


class MyException(Exception):
    pass

try:
    raise MyException("Π­Ρ‚ΠΎ ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅")
except MyException as e:
    print(f"ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: {e}")

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ MyException, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся подклассом Exception. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово raise, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с экзСмпляром нашСго Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ Π±Π»ΠΎΠΊΠ΅ except ΠΌΡ‹ Π»ΠΎΠ²ΠΈΠΌ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, выводя сообщСниС ΠΎΠ± ошибкС.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ созданиС собствСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ спСцифичСскиС ошибки ΠΈΠ»ΠΈ ситуации Π² вашСм ΠΊΠΎΠ΄Π΅.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки ΠΈ нСстандартныС ситуации Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ спСцифичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своС собствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python.

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Для создания ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ унаслСдован ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Exception ΠΈΠ»ΠΈ Π΅Π³ΠΎ подклассов. Π’ этом классС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

class CustomException(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return f"Custom Exception: {self.message}"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ опрСдСляСм класс CustomException, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Exception. Π£ нас Π΅ΡΡ‚ΡŒ конструктор __init__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сообщСниС ΠΈ сохраняСт Π΅Π³ΠΎ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ message. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ __str__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строковоС прСдставлСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ.

2. Выброс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

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

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выбрасывания нашСго собствСнного ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

try:
    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
    x = 10
    if x < 0:
        raise CustomException("Число Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ")
    else:
        print("Число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅")
except CustomException as e:
    print(e)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ провСряСм условиС x < 0. Если условиС истинно, ΠΌΡ‹ выбрасываСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ CustomException с сообщСниСм "Число Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ". Если условиС Π»ΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС "Число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅". Π’ Π±Π»ΠΎΠΊΠ΅ except ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ сообщСниС.

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

Когда ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выбрасываСтся, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π»ΠΎΠΊ try-except. Π’ Π±Π»ΠΎΠΊΠ΅ try ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° Π² Π±Π»ΠΎΠΊΠ΅ except ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ нашСго собствСнного ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

try:
    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
    x = -10
    if x < 0:
        raise CustomException("Число Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ")
    else:
        print("Число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅")
except CustomException as e:
    print(e)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x Ρ€Π°Π²Π½Ρ‹ΠΌ -10, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ x < 0, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ CustomException. Π’ Π±Π»ΠΎΠΊΠ΅ except ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ сообщСниС.

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

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

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

#31. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ raise ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ | ООП Python

ΠžΡΠ½ΠΎΠ²Ρ‹ Python #15: Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Всё ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌΠΈ Π² Python

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Как ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ 2 Ρ€Π°Π·Π°: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ✨

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΈΡ‚ΠΎΠ½Π° ΠΈ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒΡΡ с Π½ΠΎΠ²ΠΎΠΉ? βœ‚οΈπŸ

πŸ” Как Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² Python: простыми способами

πŸ”§ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Python: пошаговоС руководство 🐍

πŸ”₯ Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ надпись Π² Python: Π»Π΅Π³ΠΊΠΈΠΉ Π³ΠΈΠ΄ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…! πŸ”₯

πŸ”Ž Как обозначаСтся тСкст Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅: основныС ΠΏΡ€Π°Π²ΠΈΠ»Π° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ None Π² Python? ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹