Проверка на int python

У меня есть функция Python, которая принимает числовой аргумент, который должен быть целым числом, чтобы он вел себя корректно. Каков предпочтительный способ проверки этого в Python?

Моя первая реакция — сделать что-то вроде этого:

Но я не могу не думать о том, что это 1) дорогой 2) уродливый и 3) с учетом нежных милостей машинного эпсилона.

Предоставляет ли Python какие-либо собственные средства переменных проверки типов? Или это считается нарушением языка динамически типизированного дизайна?

РЕДАКТИРОВАТЬ: поскольку многие люди спрашивали — приложение, о котором идет речь, работает с префиксами IPv4, используя данные из текстовых файлов. Если какой-либо вход обрабатывается в float, эта запись должна рассматриваться как некорректная и игнорироваться.

Если вам нужно знать, действительно ли это фактический int, а не подкласс int (обычно вам не нужно это делать):

не такая хорошая идея, как могут быть сопоставления между типами — особенно int(3.0)==3.0

Да, как сказал Эван, не набирайте чек. Просто попробуйте использовать значение:

У этого нет typecheck. Это намного лучше! Посмотрим, что произойдет, когда я попробую:

Это работает, потому что это целое число. Гектометр Давайте попробуем текст.

Он показывает ошибку, TypeError, что и должно делать в любом случае. Если вызывающий абонент хочет поймать это, это возможно.

Что бы вы сделали, если бы вы сделали typecheck? Сообщить об ошибке Поэтому вам не нужно проверять тип, потому что ошибка уже отображается автоматически.

Плюс, так как вы не проверили typecheck, у вас есть функция, работающая с другими типами:

Даже полностью произвольные объекты, которые могут добавлять числа!

Таким образом, вы явно ничего не получаете путем проверки типов. И потерять много.

Читайте также  Почему скачет вай фай

UPDATE:

Поскольку вы отредактировали вопрос, теперь стало ясно, что ваше приложение вызывает некоторую восходящую процедуру, которая имеет смысл только с помощью int.

В этом случае я все же думаю, что вы должны передать параметр , полученный , в функцию восходящего потока. Функция восходящего потока будет правильно работать с ней, например. при возникновении ошибки, если это необходимо. Я сильно сомневаюсь, что ваша функция, которая имеет дело с IP-адресами, будет вести себя странно, если вы передадите ей float. Если вы можете дать нам имя библиотеки, мы можем проверить это для вас.

Но. Если восходящая функция будет вести себя некорректно и убьет некоторых детей, если вы передадите ей поплавок (я все еще очень сомневаюсь в этом), просто просто назовите int() на нем:

Вы по-прежнему не проверяете typecheck, поэтому получаете больше преимуществ от проверки типов.

Если даже после всего этого вы действительно хотите напечатать чек, несмотря на то, что это уменьшает читаемость и производительность приложений без какой-либо выгоды, используйте assert для этого.

Таким образом мы можем отключить assert и удалить эту функцию из программы, назвав ее как

Это проверяет, является ли n Python int и только int. Он не будет принимать подклассы int .

Проверка типов, однако, не соответствует "Python way". Лучше использовать n как int, и если он выдает исключение, поймайте его и действуйте по нему.

Python теперь поддерживает постепенное печатание через набор текста и mypy. Модуль typing является частью stdlib с Python 3.5 и может быть загружен из PyPi, если вам нужны backports для Python 2 или предыдущих версии Python 3. Вы можете установить mypy , запустив pip install mypy из командной строки.

Читайте также  Растекаться мыслью по дереву значение

Короче говоря, если вы хотите проверить, что какая-либо функция принимает в int, float и возвращает строку, вы должны аннотировать вашу функцию следующим образом:

Если ваш файл был назван test.py , тогда вы можете проверить тип после того, как вы установили mypy, запустив mypy test.py из командной строки.

Если вы используете более старую версию Python без поддержки аннотаций функций, вы можете использовать комментарии типа для достижения того же эффекта:

Вы используете ту же команду mypy test.py для файлов Python 3 и mypy —py2 test.py для файлов Python 2.

Аннотации типа полностью игнорируются интерпретатором Python во время выполнения, поэтому они накладывают минимальные накладные расходы — обычный рабочий процесс должен работать над вашим кодом и периодически запускать mypy, чтобы обнаруживать ошибки и ошибки. Некоторые IDE, такие как PyCharm, будут понимать подсказки типов и могут предупреждать вас о проблемах и вводить несоответствия в вашем коде во время редактирования.

Если по какой-то причине вам нужны типы, которые нужно проверить во время выполнения (возможно, вам нужно проверить много ввода?), вы должны следовать рекомендациям, перечисленным в других ответах — например. используйте isinstance , issubclass и тому подобное. Существуют также некоторые библиотеки, такие как enforce, которые пытаются выполнить проверку типов (с учетом аннотаций типа) во время выполнения, хотя я не уверен, как готовые к изготовлению они относятся к моменту написания.

Для получения дополнительной информации и информации см. сайт mypy, mypy FAQ и PEP 484.

Достаточно часто требуется узнать: записано ли в переменной число. Такая ситуация может возникнуть при обработке введенных пользователем данных. При чтении данных из файла или при обработке полученных данных от другого устройства.

В Python проверка строки на число можно осуществить двумя способами:

  • Проверить все символы строки что в них записаны цифры. Обычно используется для этого функция isdigit.
  • Попытаться перевести строку в число. В Python это осуществляется с помощью методов float и int. В этом случае обрабатывается возможное исключение.
Читайте также  Программа для поиска файлов на компе

Рассмотрим как применяются эти способы на практике.

isdigit, isnumeric и isdecimal

У строк есть метод isdigit, который позволяет проверить, являются ли символы, являются ли символы, из которых состоит строка цифрами. С помощью этого метода мы можем проверить, записано ли в строку целое положительное число или нет. Положительное – это потому, что знак минус не будет считаться цифрой и метод вернет значение False.

Если в строка будет пустой, то функция возвратит False.

Методы строки isnumeric и isdecimal работают аналогично. Различия в этих методах только в обработке специальных символов Unicode. А так как пользователь будет вводить цифры от 0 до 9, а различные символы, например, дробей или римских цифр нас не интересуют, то следует использовать функцию isdigit.

Проверка с помощью исключения

Что же делать, если требуется проверить строку на отрицательное число. В Python с помощью isdigit не удастся определить отрицательное число или число с плавающей точкой. В этом случае есть универсальный и самый надежный способ. Надо привести строку к вещественному числу. Если возникнет исключение, то значит в строке записано не число.

Приведем функцию и пример ее использования:

Для целых чисел

Аналогично можно сделать и проверку на целое число:

Учу Python и програмирование в целом 3 день. Написал простенькую МЕГАпрогу 🙂

Когда пользователь вводит числа — всё окей. Но когда вводит строку интерпретатов возвращает ошибку.
Вопрос. Как можно зделать проверку что пользователь ввёл int() а не str() .

Ссылка на основную публикацию
Adblock
detector