πŸ”§ Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дСйствиС Π² Python: простыС способы ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дСйствиС Π² Python?

Π’ Python Π΅ΡΡ‚ΡŒ нСсколько способов Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дСйствиС:

  1. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try-except Π±Π»ΠΎΠΊΠ°
  2. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° finally Π±Π»ΠΎΠΊΠ°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try-except Π±Π»ΠΎΠΊΠ°:


try:
    # Π’Π°Ρˆ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ
    result = 10 / 0
except ZeroDivisionError:
    # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибки дСлСния Π½Π° ноль
    result = float('inf')

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ дСлСния Π½Π° ноль, находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try. Если происходит ошибка, которая соотвСтствуСт ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ошибки, выполняСтся Π±Π»ΠΎΠΊ except, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ дСйствия.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° finally Π±Π»ΠΎΠΊΠ°:


try:
    # Π’Π°Ρˆ ΠΊΠΎΠ΄
    file = open('example.txt', 'r')
    # ДСйствия с Ρ„Π°ΠΉΠ»ΠΎΠΌ
finally:
    file.close()

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΠ΄ выполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try, Π° Π·Π°Ρ‚Π΅ΠΌ Π±Π»ΠΎΠΊ finally всСгда выполняСтся нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Π±Π»ΠΎΠΊ finally ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для закрытия Ρ„Π°ΠΉΠ»Π° нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ подходящий способ восстановлСния дСйствия Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации.

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

Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дСйствиС Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅

ВосстановлСниС дСйствия (undo) являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях Python. Оно позволяСт ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ измСнСния ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ восстановлСния дСйствия Π² Python ΠΈ прСдоставим ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

1. ИспользованиС стСка для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ дСйствия

Одним ΠΈΠ· простых способов восстановлСния дСйствия являСтся использованиС стСка. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ состояния Π΄Π°Π½Π½Ρ‹Ρ… Π² стСкС ΠΈ ΠΏΡ€ΠΈ нСобходимости Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


class UndoStack:
    def __init__(self):
        self.stack = []

    def push(self, data):
        self.stack.append(data)

    def pop(self):
        if self.stack:
            return self.stack.pop()
        else:
            return None

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
stack = UndoStack()
stack.push(5)  # ДобавляСм Π΄Π°Π½Π½Ρ‹Π΅ Π² стСк
stack.push(10)
print(stack.pop())  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 10
print(stack.pop())  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 5

2. ИспользованиС класса для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ дСйствия

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ дСйствия - созданиС класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ состояниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π΅Π³ΠΎ измСнСния ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


class Data:
    def __init__(self):
        self.value = 0

    def increment(self):
        self.value += 1

    def decrement(self):
        self.value -= 1

    def undo(self):
        # РСализация ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ дСйствия
        pass

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
data = Data()
data.increment()  # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° 1
data.undo()  # ΠžΡ‚ΠΌΠ΅Π½ΡΠ΅ΠΌ послСднСС дСйствиС
print(data.value)  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 0

3. ИспользованиС сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Если Π²Π°ΠΌ трСбуСтся Π±ΠΎΠ»Π΅Π΅ слоТный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» восстановлСния дСйствия, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° этой Π·Π°Π΄Π°Ρ‡Π΅. НСкоторыС популярныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ "undo" ΠΈ "python-undo". УстановитС ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² pip:


pip install undo
pip install python-undo

РСзюмС

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

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

37 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Python

22 Π¦ΠΈΠΊΠ» while. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ break, continue, else

OOP 36 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Try Except Finally Python

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

πŸ” Как вывСсти элСмСнт списка ΠΈΠ· словаря python: простоС руководство

πŸ”ΠšΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку Π² Ρ„Π°ΠΉΠ» ΠΏΠΈΡ‚ΠΎΠ½? ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π² словарС Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ? πŸ“šπŸ”€

πŸ”§ Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дСйствиС Π² Python: простыС способы ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

πŸ”Ž Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: простой Π³Π°ΠΉΠ΄ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов

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

πŸ”§ Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ подстроку Π² Python: простой способ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ строки