如何在 Python 中修复“<string> DeprecationWarning: invalid escape sequence”?

Posted

技术标签:

【中文标题】如何在 Python 中修复“<string> DeprecationWarning: invalid escape sequence”?【英文标题】:How to fix "<string> DeprecationWarning: invalid escape sequence" in Python? 【发布时间】:2019-02-19 12:04:15 【问题描述】:

我在 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 并且适用相同的解决方案。 【参考方案1】:

当我将路径名称中的 \ 更改为 \\ 时,解决了 Invalid escape sequence 警告。供您参考,请在下面找到随附的屏幕截图。我在 pycharm 中遇到了这个错误:

【讨论】:

【参考方案2】:

\ is the escape character in Python string literals.

例如,如果您想在字符串中添加制表符,您可以这样做:

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

如果您想将文字 \ 放入字符串中,您必须使用 \\

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

或者使用“原始字符串”:

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

您不能只在需要的时候在字符串文字中添加反斜杠。反斜杠在后面没有有效转义序列之一和newer versions of Python print a deprecation warning 时无效。例如\A 不是转义序列:

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

如果你的反斜杠序列不小心匹配了 Python 的转义序列之一,但你不是故意的,那就更糟了。

因此,您应该始终使用原始字符串或\\

重要的是要记住,字符串文字仍然是字符串文字,即使该字符串旨在用作正则表达式。 Python's regular expression syntax 支持许多以\ 开头的特殊序列。例如\A 匹配字符串的开头。但是\A 在 Python 字符串文字中无效!这是无效的:

my_regex = "\Afoo"

您应该这样做:

my_regex = r"\Afoo"

文档字符串是另一个要记住的:文档字符串也是字符串文字,无效的\ 序列在文档字符串中也是无效的!如果文档字符串包含 \'s,则使用原始字符串 (r"""...""")。

【讨论】:

但是,如果您有一个包含字符串的变量,如何将其转换为原始字符串,以免被误解?这对我不起作用:r"".format(my_variable) 原始字符串与常规字符串的类型不同,它只是在源代码中编写字符串文字的不同方式。一旦你有一个包含字符串的变量,就是一个字符串。常规或原始之间没有区别或区别 转义反斜杠适用于转义点的正则表达式。这就是我想到的地方。见my answer here to "Regular expression to match a dot"。因此,您必须使用"\\."r"\." 而不是"\."。我花了一段时间才弄清楚。你的回答有帮助。谢谢。

以上是关于如何在 Python 中修复“<string> DeprecationWarning: invalid escape sequence”?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此错误类型“_InternalLinkedHashMap<String, dynamic>”不是“FutureOr<List<dynamic>>”类型的子类

如何修复 Flutter 需要一个“Map<String, dynamic>”类型的值,但得到一个“List<dynamic>”类型的值

mapreduce c编程无法与-fPIC链接,如何修复?

SWIG 如何在 Python 中包装 map<string,string>?

如何在 Python sklearn 中修复 SVR 图

如何在python中修复“IndexError:元组索引超出范围”?