Similar presentations:
Исключения. Работа с файлами. Сортировка Оливера Захаров Хосе Альберто
1. Оливера Захаров Хосе Альберто Ассистент кафедры проблем управления (ПУ)
Исключения. Работа с файлами. СортировкаОливера Захаров Хосе Альберто
Ассистент кафедры
проблем управления (ПУ)
24.04.2025
2. Синтаксические ошибки
for i in range()print("Hello")
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\
errors.py", line 1
for i in range()
^
SyntaxError: expected ':'
while True:
print "Hello"
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\
errors.py", line 2
print "Hello"
^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you
mean print(...)?
3. Исключения ИСПРАВИТЬ
string = "string"number = 10
result = number + string
print(result)
zero = 0
number = 10
result = number/zero
print(result)
zero = 0
result = number/zero
print(result)
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\errors.py",
line 1
for i in range()
^
SyntaxError: expected ':'
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\errors.py",
line 3, in <module>
result = number/zero
~~~~~~^~~~~
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\errors.py",
line 2, in <module>
result = number/zero
^^^^^^
NameError: name 'number' is not defined
4. Исключения
Base ExceptionGeneratorExit
KeyBoardInterrupt
Exception
Attribute
Error
Arithmetic
Error
EOF Error
Name Error
SystemExit
OS Error
Lookup
Error
ZeroDivision
Error
FileNotFound
Error
Index Error
Floating Point
Error
Permission
Error
Key Error
Overflow
Error
Interrupted
error
TimeOut
Error
Type Error
Value Error
5. Обработка исключений try, except, наследование
while True:try:
x = int(input("Введите число: "))
break
except ValueError:
print("Я ожидал увидеть число. Попробуй ещё раз...")
Введите число: step
Я ожидал увидеть число. Попробуй ещё раз...
Введите число: seek
Я ожидал увидеть число. Попробуй ещё раз...
Введите число: 2
Process finished with exit code 0
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
Вывод:
B
C
D
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except B:
print("B")
except C:
print("C")
except D:
print("D")
Вывод:
B
B
B
6. Обработка исключений объединение в кортеж
try:number = int(input("Введите натуральное число: "))
print(number2 + number)
except NameError as error:
print(error)
except TypeError as error:
print(error)
except RuntimeError as error:
print(error)
try:
number = int(input("Введите натуральное число: "))
print(number2 + number)
except (NameError, TypeError, ValueError) as error:
print(error)
Дублирование кода
_____________________________
Менее читаемо и поддерживаемо
Введите натуральное число: errors
invalid literal for int() with base 10: 'errors'
Введите натуральное число: 2
name 'number2' is not defined
7. Обработка исключений в функциях
def zero_division():x = 1/0
try:
zero_division()
except ZeroDivisionError as err:
print('Handling run-time error:', err)
Handling run-time error: division by zero
8. Обработка исключений в функциях
def division(n: int, number: int):for i in range(-n, n+1):
print(f"{number} / {i} = ", end="")
yield number/i
num = int(input("Введите натуральное число: "))
divise = int(input("Введите делимое: "))
for value in division(num, divise):
print(value)
try:
print(f"{number} / {i} = ", end="")
yield number/i
except ZeroDivisionError:
print("На ноль делить нельзя")
6 / 0 = Traceback (most recent call last):
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 8, in <module>
for value in division(num, divise):
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 4, in division
yield number/i
ZeroDivisionError: division by zero
6 / -3 = -2.0
6 / -2 = -3.0
6 / -1 = -6.0
6 / 0 = На ноль делить нельзя
6 / 1 = 6.0
6 / 2 = 3.0
6 / 3 = 2.0
9.
Обработка исключенийelse
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error:", err)
import sys
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except OSError:
print('cannot open', arg)
else:
print(arg,'has',len(f.readlines()),‘
lines')
f.close()
File "C:\Users\User\PycharmProjects\PythonProject\lesson_4\
errors.py", line 4, in <module>
i = int(s.strip())
^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'qweqweqw'
File "C:\Users\User\PycharmProjects\PythonProject\
lesson_4\errors.py", line 2
print "Hello"
^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did
you mean print(...)?
10.
Обработка исключенийfinally
import time
import time
logs_file = open("logs.txt", "a")
try:
logs_file.write(f"{time.ctime()}\n")
except TypeError as error:
print(f"Ошибки записи в файл. Ожидалась строка. {error}")
else:
print("Программа успешно выполнилась.")
finally:
logs_file.close()
print("Файл закрыт!" if logs_file.closed else "Файл не закрыт!")
logs_file = open("logs.txt", "a")
try:
logs_file.write(int(f"{time.ctime()}\n“))
except (TypeError, ValueError) as error:
print(f"Ошибки записи в файл. Ожидалась строка. {error}")
else:
print("Программа успешно выполнилась.")
finally:
logs_file.close()
print("Файл закрыт!" if logs_file.closed else "Файл не закрыт!")
Traceback (most recent call last):
File "C:\Users\Jose\PycharmProjects\For practice\lesson_4\
raise_exc.py", line 5, in <module>
logs_file.write(int(f"{time.ctime()}\n"))
ValueError: invalid literal for int() with base 10: 'Wed Apr
23 14:15:06 2025\n'
Файл закрыт!
11.
Вызов исключенийname = "Ivan"
raise
name = "Ivan"
raise BaseException
Traceback (most recent call last):
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 2, in
<module>
raise BaseException
BaseException
Нет описания ошибки
Ошибка общего вида
Усложняет отладку
12.
Вызов исключенийclass Car:
def __init__(self, consumption:int, model:str) -> None:
self._consumption = consumption
self._model = model
Машина 'Toyota' потребляет 1л на 12км
Машина '12' потребляет 1л на 12км
def __str__(self):
return f"Машина '{self._model}' потребляет 1л на
{self._consumption}км"
def __repr__(self):
return f"{self.__class__.__name__}({self._consumption,
self._model}"
@property
def model(self) -> str:
return self._model
@model.setter
def model(self, model:str) -> None:
self._model = model
car1 = Car(12, "Toyota")
print(car1)
car1.model = 12
print(car1)
@model.setter
def model(self, model:str) -> None:
if self._model is not str:
raise TypeError(f"Ожидался строковы тип данных, а не
{type(model)}")
self._model = model
Traceback (most recent call last):
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 38, in <module>
car1.model = 12
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 33, in model
raise TypeError(f"Ожидался строковы тип данных, а не
{type(model)}")
TypeError: Ожидался строковы тип данных, а не <class 'int'>
13.
Пробрасывание исключенийkvbo_list = {}
while True:
try:
name = input("Имя: ")
grade = int(input("Балл: "))
if not name.isalpha():
raise TypeError
if not isinstance(grade, int):
raise ValueError
kvbo_list[name] = grade
if len(kvbo_list) == 3:
break
except (TypeError, ValueError):
print("Неккоректный ввод...")
Имя: stop
Балл: -1
Введено стоп-слово
Traceback (most recent call last):
File "C:\Users\Jose\PycharmProjects\For
practice\lesson_4\raise_exc.py", line 48, in <module>
raise BaseException("Ты сломал программу")
BaseException: Ты сломал программу
Имя: Igor
Балл: 20
Имя: Maxim
Балл: 25
Имя: Sergey
Балл: 15
if name.lower() == "stop" or grade == -1:
kvbo_list = {}
raise BaseException (“Ты сломал программу")
if name.lower() == "stop" or grade == -1:
raise BaseException (“Ты сломал программу")
except BaseException:
kvbo_list = {}
print("Введено стоп-слово")
except BaseException:
kvbo_list = {}
print("Введено стоп-слово")
raise
14. Абсолютный и относительный пути
Относительный путьfile_name = "raise_exc.py"
directory_name = "lesson_4"
path = "{f_n}/{dir_n}".format(f_n=file_name,
dir_n=directory_name)
print(path)
import os
file_name = "raise_exc.py"
directory_name = "lesson_4"
path = os.path.join(directory_name, file_name)
print(path)
Абсолютный путь
import os
file_name = "raise_exc.py"
directory_name = "lesson_4"
path = os.path.abspath(file_name)
print(path)
15. Модуль os. Методы
Переход в каталог выше:path = os.path.abspath(os.path.join("..", file_name))
Переход в корневой каталог диска:
path = os.path.abspath(os.path.join(os.path.sep, file_name))
Вывод каталогов и файлов директории
print(os.listdir(os.path.join("..", directory_name)))
Проверка существования пути
if os.path.exists(new_path):
pass
Является ли путь директорией
if os.path.isdir(new_path):
pass
16. Работа с файлами
file = open("название_файла", "доступ_к_файлу", encoding="utf-8")file = open("logs.txt", "r", encoding="utf-8")
data = file.read()
for line in file:
print(line, end="")
file.close()
read_file = open("logs.txt", "r")
list_to_write = list()
for line in read_file:
temp = line.split()
list_to_write.append(f"{temp[0]} {temp[1]} {temp[2]}\n")
read_file.close()
write_file = open("date.txt", "w")
for value in list_to_write:
write_file.write(value)
write_file.close()
print("какая-то_файла", file=write_file)
17.
Контекст-менеджер:оператор with
import time
try:
logs_file = open("logs.txt", "r")
logs_file.write(f"{time.ctime()}\n")
except TypeError as error:
print(f"Ошибки записи в файл. Ожидалась строка. {error}")
else:
print("Программа успешно выполнилась.")
finally:
logs_file.close()
print("Файл закрыт!" if logs_file.closed else "Файл не
закрыт!")
Сокращение кода
Гарантия закрытия файла
try:
Wed Apr 23 14:10:24 2025
Wed Apr 23 14:13:35 2025
Wed Apr 23 14:28:52 2025
Программа успешно выполнилась.
Файл не закрыт!
with open("logs.txt", "r") as logs:
try:
print(logs.read())
except TypeError as error:
print(f"Ошибки записи в файл. Ожидалась строка. {error}")
else:
print("Программа успешно выполнилась.")
finally:
print("Файл закрыт!" if logs.closed else "Файл не закрыт!")
except FileNotFoundError:
print("Файл не найден!")
18. Сортировка пузырьком
19. Сортировка пузырьком
from random import randintdef bubble_sort(nums: list) -> list:
global count
temp = 1
while temp != 0:
temp = 0
for i in range(len(nums) - 1):
count += 1
if nums[i] > nums[i+1]:
nums[i], nums[i+1] = nums[i+1], nums[i]
temp += 1
return nums
count = 0
numbers = [randint(1, 20) for _ in range(100)]
print(f"{numbers}\n{bubble_sort(numbers)}\n{count}")
Эффективен для списков
небольшого размера
Простейший для понимания
и реализации
Сложность:
informatics