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






В верхней части страницы документация, которую вы связали содержит примечание, в котором говорится (выделено мной):
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 их игнорирует, и точка. Другой вопрос, использует ли их ваш код в дальнейшем.