Для проверки существования заданного пути используйте функцию os.path.exists :
import os.path os.path.exists(file_path)
Но она вернет True и для файла и для директории.
os.path.isfile проверит именно на наличие файла.
Отслеживать
ответ дан 7 апр 2015 в 16:46
727 1 1 золотой знак 5 5 серебряных знаков 15 15 бронзовых знаков
Кратко: вместо if exists(): open() используйте просто open() .
Если проверка нужна, чтобы выполнить позднее какую-либо операцию с файлом, то лучше прямо выполнить эту операцию и поймать возможные ошибки (предполагая, что вы на том же уровне ошибки хотите обработать):
#!/usr/bin/env python # -*- coding: utf-8 -*- try: file = open(‘input.txt’) except IOError as e: print(u’не удалось открыть файл’) else: with file: print(u’делаем что-то с файлом’)
Предварительная проверка всё равно не гарантирует, что файл всё ещё будет существовать позднее и всё равно придётся ошибки обрабатывать.
Ответы на комментарии:
- Где блок finally в котором вы закрывается поток
finally здесь не нужен. Если код попал в except блок, то файл не открыт — нечего закрывать. В else ветке, где файл открыт, with file: конструкция всегда закрывает файл при выходе из блока (нормальном или когда исключение возникло).
Подходит ли тебе программирование? Легко проверить
- Конструкция try-exept-else многими считается плохо читаемой.
Обычно try/except не используется на том же уровне, то есть в коде используется просто:
with open(‘input.txt’) as file: print(u’делаем что-то с файлом’)
а возможные исключения выше по стеку обрабатываются. Но если вы хотите обработать ошибку в open() на том же уровне, то вы обязаны использовать try/except ( open() сигнализирует ошибки с помощью исключений).
- Каждый раз, когда файла нет, вы вызываете прерывание ОС (на нем строится механизм обработки исключения) самостоятельно, не слишком ли это раcточительно?
Исключения выбрасываются в случае ошибки в Питоне хотите вы этого или нет. Вот реализация os.path.exists() из стандартной библиотеки:
def exists(path): try: os.stat(path) except OSError: return False return True
фактически, используя open() напрямую, а не if exists(): open() мы уменьшаем количество системных вызовов.
- Ваш код занял 7 строчек, не лучше ли эту задачу поручить операционной системе командой os.path.exists(path_to_file) в пару строчек ?
Длина кода, который не работает, не имеет значения. Ещё раз: вызов os.path.exists() не гарантирует что файл существует когда вы попытаетесь вызвать open() позднее: всё равно придётся обрабатывать ошибки.
Стоит упомянуть, что если отсутствие файла не является ошибкой в вашем случае (ожидается программой), то вполне можно os.path.exists() или его аналоги использовать, чтобы подчеркнуть вероятность отсутствия файла для читателя кода (но так как последующее открытие файла может быть всё равно неудачным, то это не освобождает код от добавления обработки ошибок, подходящего для вашей задачи, такого как try/except выше).
проверка ввода на число python (питон) #short
Источник: ru.stackoverflow.com
Как работать с тестированием кода на Python
Освойте основы тестирования кода на Python с примерами и практическими советами для эффективного использования модуля `unittest`.
Алексей Кодов
Автор статьи
23 июня 2023 в 18:52
Тестирование кода является важной частью процесса разработки программного обеспечения. В этой статье мы рассмотрим основы тестирования кода на Python, используя модуль unittest .
Что такое тестирование кода?
Тестирование кода — это процесс проверки корректности работы программы или ее части. Цель тестирования — обнаружить ошибки и несоответствия требованиям, а также убедиться, что код работает правильно.
Модуль unittest
Python включает в себя мощный модуль для проведения автоматического тестирования — unittest . Этот модуль предоставляет инструменты для создания тестов, организации и запуска их, а также отчеты об их успешном прохождении или провале.
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT
Давайте рассмотрим пример использования модуля unittest для тестирования простой функции, которая складывает два числа.
def add(a, b): return a + b
Чтобы создать тесты для этой функции, создайте новый файл с именем test_add.py и импортируйте модуль unittest и функцию add .
import unittest from my_module import add
Теперь создайте класс, который будет содержать тесты для функции add . Этот класс должен наследоваться от класса unittest.TestCase .
class TestAdd(unittest.TestCase): pass
Внутри класса TestAdd создайте методы, которые будут тестировать различные аспекты функции add . Например, проверьте, что функция возвращает правильную сумму двух чисел.
class TestAdd(unittest.TestCase): def test_add(self): self.assertEqual(add(1, 2), 3)
Обратите внимание, что мы используем метод assertEqual для проверки равенства ожидаемого и полученного результатов.
Теперь, чтобы запустить тесты, добавьте следующий код в конец файла test_add.py .
if __name__ == «__main__»: unittest.main()
Запустите файл test_add.py , и вы должны увидеть сообщение о том, что тест успешно пройден.
Заключение
Тестирование кода на Python является важным элементом разработки программного обеспечения. Используйте модуль unittest для создания и запуска тестов, обеспечивая корректную работу вашего кода.
Не забывайте изучать дополнительные материалы и практиковаться в тестировании кода, чтобы стать более опытным разработчиком. Удачи вам в изучении Python!
Источник: sky.pro
Продвинутое тестирование в Python: как писать доктесты
Документация и тестирование – основные компоненты любого продуктивного процесса разработки программного обеспечения. Тщательное документирование и тестирование кода не только позволяет вам убедиться, что программа функционирует должным образом, но и поддерживает совместную работу программистов, а также влияет на адаптацию пользователей. Программисту может быть полезно сначала написать документацию, затем тесты, и только потом – сам код. Следуя такому процессу, вы можете быть уверены, что кодируемая функция хорошо продумана и учитывает возможные пограничные случаи.
Стандартная библиотека Python поставляется с модулем фреймворка для тестирования, он называется doctest. Модуль doctest ищет в комментариях кода Python фрагменты текста, которые выглядят как интерактивные сеансы Python. Затем модуль выполняет эти сеансы, чтобы подтвердить, что код, на который ссылается doctest, работает так, как задумано.
Кроме того, doctest генерирует для кода документацию, предоставляя примеры ввода-вывода. В зависимости от вашего подхода к написанию доктестов, она может быть ближе к грамотному тестированию или исполняемой документации (согласно Python Standard Library).
Структура доктеста
Доктесты в Python пишутся в виде обычных комментариев, но помещаются внутри двойных кавычек – нужно три символа в начале и в конце доктеста.
Иногда в доктесты включается пример функции и ожидаемого результата, иногда также нужно включить комментарий о том, для чего предназначена функция. Комментарии помогают программистам подробно описать свои цели, чтобы люди, читающие код в будущем, могли легко все понять (не стоит забывать, что таким человеком может оказаться и сам автор кода).
Ниже приведен математический пример доктеста для функции add (a, b), которая складывает два числа:
Given two integers, return the sum.
В этом примере мы видим комментарий и пример функции add() с двумя целыми числами в качестве входных значений. Если в будущем вы захотите, чтобы функция могла складывать более двух целых чисел, вам нужно будет соответствующим образом изменить доктест.
Пока что этот доктест хорошо читается человеком. Вы можете продолжить работу с этой строкой доктеста, включив машиночитаемые параметры и описание возврата, чтобы пояснить каждую входящую и выходящую переменную.