Ответы на тест
Вопрос 1. Возникает KeyError, потому что ключа "c" нет в словаре. Обработчик IndexError не подходит, сработает except Exception.
Правильный ответ: Ошибка
Вопрос 2. Блок except ValueError выполняется и печатает текст с end=" | ", затем всегда выполняется finally.
Правильный ответ: Ошибка преобразования | Блок finally
Вопрос 3. Сначала печатается "Начало", затем возбуждается ValueError. ZeroDivisionError не подходит, срабатывает Exception. В конце выполняется finally.
Правильный ответ: Начало | Общее исключение | Блок finally
Вопрос 4. Блок finally выполняется всегда, независимо от того, было исключение или нет.
Правильный ответ: finally
Вопрос 5. Параметр format задаёт строку формата для записей лога.
Правильный ответ: format
Вопрос 6. Две точки .. обозначают родительскую директорию.
Правильный ответ: ..
Вопрос 7. Функция os.path.exists(path) проверяет, существует ли файл или директория.
Правильный ответ: os.path.exists(path)
Вопрос 8. os.makedirs создаёт промежуточные директории, а exist_ok=True отключает ошибку, если они уже есть.
Правильный ответ: os.makedirs(path, exist_ok=True)
Вопрос 9. Для переименования файла используется os.rename.
Правильный ответ: os.rename("old.txt", "new.txt")
Вопрос 10. os.path.basename возвращает последний компонент пути — имя файла.
Правильный ответ: os.path.basename(path)
Вопрос 11. os.path.join корректно соединяет пути и избавляет от ошибок ручной склейки. Он не меняет текущую директорию и не создаёт файлов.
Правильный ответ: a и b
Вопрос 12. sys.argv[0] — это имя скрипта. Пользовательских аргументов нет, поэтому длина списка равна 1.
Правильный ответ: Нет аргументов
Решение мини-задачи 1. Поиск текстовых файлов
# find_txt.py
import os
import sys
def find_txt_files(directory: str) -> list[str]:
"""Рекурсивно ищет все .txt файлы в директории."""
found: list[str] = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(".txt"):
found.append(os.path.join(root, file))
return found
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Использование: python find_txt.py <директория>")
sys.exit(1)
target_dir = sys.argv[1]
if not os.path.isdir(target_dir):
print(f"Ошибка: директория '{target_dir}' не существует.")
sys.exit(1)
txt_files = find_txt_files(target_dir)
if txt_files:
print("Найдены .txt файлы:")
for path in txt_files:
print(f"- {path}")
else:
print("Текстовые файлы не найдены.")
Логика: скрипт проверяет количество аргументов, существование директории, затем обходит дерево с помощью os.walk и собирает пути к файлам с расширением .txt.
Решение мини-задачи 2. Безопасное преобразование с логированием
# safe_int.py
import logging
from typing import Optional
logging.basicConfig(
filename="conversion.log",
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.ERROR,
)
def safe_int(value: str) -> Optional[int]:
"""Преобразует строку в int или возвращает None при ошибке."""
try:
return int(value)
except ValueError:
logging.error(f"Не удалось преобразовать '{value}' в целое число")
return None
if __name__ == "__main__":
print(safe_int("42")) # 42
print(safe_int("abc")) # None
Логика: функция пытается преобразовать строку. Если возникает ValueError, ошибка записывается в лог и возвращается None.