Объявить тип переменной внутри функции

Я определяю функцию, которая получает pdf в байтах, поэтому я написал:

def documents_extractos(pdf_bytes: bytes):
    pass

Когда я вызываю функцию и К сожалению передает неверный тип, вместо байтов скажем, int, почему я не получаю ошибку? Я прочитал документация относительно набора текста, но не понимаю. Почему цель состоит в том, чтобы сообщить функции, что переменная должна быть байтами, но при передаче и int ошибки нет? С этим может справиться isinstance(var, <class_type>) верно? я этого не понимаю =(

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Подсказки типа игнорируются во время выполнения.

В верхней части страницы документация, которую вы связали содержит примечание, в котором говорится (выделено мной):

The Python runtime does not enforce function and variable type annotations. They can be used by third party tools such as type checkers, IDEs, linters, etc.

Подсказки типов предназначены для статических инструментов проверки типов (например, mypy), которые используют статический анализ для проверки того, что ваш код учитывает написанные подсказки типов. Эти инструменты должны запускаться как отдельный процесс. Их основное назначение — гарантировать, что новые изменения в больших кодовых базах не приведут к потенциальным проблемам с типизацией (которые в конечном итоге могут превратиться в скрытые ошибки, которые трудно устранить).

Если вам нужны явные проверки типа во время выполнения (например, чтобы поднять Exception, если в функцию передано значение неправильного типа), использовать isinstance().

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

Если вы не хотите использовать проверки isinstance самостоятельно, вы можете использовать одну из этих библиотек.

Пример гарды:

main.py:

from typeguard import importhook
importhook.install_import_hook('mypack')

import mypack


mypack.documents_extractos("test")

mypack.py

def documents_extractos(pdf_bytes: bytes):
    pass

При запуске python3 main.py вы получите ошибку TypeError: type of argument "pdf_bytes" must be bytes-like; got str instead

Не «по умолчанию»; Python их игнорирует, и точка. Другой вопрос, использует ли их ваш код в дальнейшем.

chepner 18.03.2022 22:14

Другие вопросы по теме