Статическая типизация регулярного выражения Python: 'несовместимый тип "str"; ожидается "AnyStr | Pattern[AnyStr]" 'Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Статическая типизация регулярного выражения Python: 'несовместимый тип "str"; ожидается "AnyStr | Pattern[AnyStr]" '

Сообщение Anonymous »

Для ясности: этот вопрос не имеет ничего общего с самим регулярным выражением, и мой код прекрасно работает, даже несмотря на то, что он не проходит строгую проверку mypy.
Давайте начнем с Basic, у меня есть класс, определенный следующим образом:

Код: Выделить всё

from __future__ import annotations

import re
from typing import AnyStr

class MyClass:
def __init__(self, regexp: AnyStr | re.Pattern[AnyStr]) -> None:
if not isinstance(regexp, re.Pattern):
regexp = re.compile(regexp)
self._regexp: re.Pattern[str] | re.Pattern[bytes]= regexp
Пользователь может создать класс, передав скомпилированный шаблон re или AnyStr.
Я хочу, чтобы класс сохранял в частном атрибуте _regexp скомпилированное значение. Поэтому я проверяю, не предоставил ли пользователь скомпилированный шаблон, затем компилирую его и присваиваю частному атрибуту.
Пока все хорошо, хотя я ожидал self._regexp быть типом re.Pattern[AnyStr] вместо объединения типов шаблонов типов. В любом случае, до сих пор с mypy все в порядке.
Теперь, в некоторых (или большинстве) случаях пользователь предоставляет строку регулярного выражения через файл конфигурации TOML, который считывается и анализируется. в словаре. Для этого случая у меня есть конструктор метода класса, определенный следующим образом:

Код: Выделить всё

    @classmethod
def from_dict(cls, d: dict[str, str]) -> MyClass:
r = d.get('regexp')
if r is None:
raise KeyError('missing regexp')
return cls(regexp=r)
Тип словаря будет dict[str, str].
Мне нужно проверить, что словарь содержит правильный ключ, чтобы предотвратить NoneType в случае, если функция get не сможет найти это.
Я получаю сообщение об ошибке:

ошибка: аргумент «регулярное выражение» для «MyClass» имеет несовместимый тип " ул"; ожидается "AnyStr | Pattern[AnyStr]" [arg-type]

Это выглядит странно, поскольку строка должна быть совместима с AnyStr.Допустим, я изменил типизацию словаря на dict[str, AnyStr]. Вместо того, чтобы решить проблему, она умножает ее, потому что я получаю две ошибки:

ошибка: аргумент «regexp» для «MyClass» имеет несовместимый тип «str»; ожидаемая ошибка "AnyStr | Pattern[AnyStr]" [arg-type]

ошибка: аргумент "regexp" для "MyClass" имеет несовместимый тип "bytes"; ожидается "AnyStr | Pattern[AnyStr]" [arg-type]

Похоже, я зациклился: когда я думаю, что что-то исправил, Я просто перенес проблему в другое место.

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-expected
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Статическая типизация регулярного выражения Python: 'несовместимый тип "str"; ожидается "AnyStr | Pattern[AnyStr]" '
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Статическая типизация регулярного выражения Python
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Статическая типизация регулярного выражения Python
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Статическая типизация регулярного выражения Python
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Почему DICT [STR, STR] назначается для картирования [STR | int, str] (тип ключа отображения не коварит)?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»