WedX - журнал о программировании и компьютерных науках

Как исправить ‹string› DeprecationWarning: недопустимая escape-последовательность в Python?

Я получаю много таких предупреждений в Python:

DeprecationWarning: invalid escape sequence \A
  orcid_regex = '\A[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[0-9X]\Z'

DeprecationWarning: invalid escape sequence \/
  AUTH_TOKEN_PATH_PATTERN = '^\/api\/groups'

DeprecationWarning: invalid escape sequence \
  """

DeprecationWarning: invalid escape sequence \.
  DOI_PATTERN = re.compile('(https?://(dx\.)?doi\.org/)?10\.[0-9]{4,}[.0-9]*/.*')

<unknown>:20: DeprecationWarning: invalid escape sequence \(

<unknown>:21: DeprecationWarning: invalid escape sequence \(

Что они имеют в виду? И как я могу их исправить?


  • С Python 3.8-dev это даст вам SyntaxWarning вместо DeprecationWarning, и применяется то же решение. 15.02.2019

Ответы:


1

\ — управляющий символ в строковых литералах Python .

Например, если вы хотите поместить символ табуляции в строку, вы должны сделать:

>>> print("foo \t bar")
foo      bar

Если вы хотите поместить литерал \ в строку, вы должны использовать \\:

>>> print("foo \\ bar")
foo \ bar

Или используйте «необработанную строку»:

>>> print(r"foo \ bar")
foo \ bar

Вы не можете просто поставить обратную косую черту в строковых литералах, когда захотите. Обратная косая черта недействительна, если за ней не следует одна из допустимых escape-последовательностей, а более новые версии Python выводят предупреждение об устаревании< /а>. Например, \A не является управляющей последовательностью:

$ python3.6 -Wd -c '"\A"'
<string>:1: DeprecationWarning: invalid escape sequence \A

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

Поэтому вы всегда должны использовать необработанные строки или \\.

Важно помнить, что строковый литерал остается строковым литералом, даже если эта строка предназначена для использования в качестве регулярного выражения. синтаксис регулярных выражений Python поддерживает множество специальных последовательностей, начинающихся с \. Например, \A соответствует началу строки. Но \A недействителен в строковом литерале Python! Это неверно:

my_regex = "\Afoo"

Вместо этого вы должны сделать это:

my_regex = r"\Afoo"

Строки документации — это еще одна вещь, о которой следует помнить: строки документации также являются строковыми литералами, и недопустимые последовательности \ также недействительны в строках документации! Используйте необработанные строки (r"""...""") для строк документации, если они содержат \.

14.09.2018
  • Однако если у вас есть переменная, содержащая строку, как преобразовать ее в необработанную строку, чтобы она не была неверно истолкована? У меня это не работает: r"{}".format(my_variable) 10.04.2019
  • Необработанная строка не отличается от обычной строки, это просто другой способ написания строкового литерала в исходном коде. Если у вас есть переменная, содержащая строку, это строка. Нет никакой разницы или различия между обычным или необработанным 02.12.2019
  • Экранирование обратной косой черты применяется к регулярным выражениям, в которых вы экранируете точку. Вот это мне и пришло в голову. См. мой ответ здесь на регулярное выражение для соответствия точке. Итак, вы должны сделать "\\." или r"\." вместо "\.". Мне потребовалось время, чтобы понять. Ваш ответ помог. Спасибо. 21.03.2021

  • 2

    Когда я изменил \ на \\ в имени пути, Разрешено предупреждение о недопустимой escape-последовательности. Для справки, пожалуйста, найдите прикрепленный скриншот ниже. Я получал эту ошибку в pycharm:

    введите здесь описание изображения

    введите здесь описание изображения

    11.05.2020
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]