如何在 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>”类型的值