我在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 \(

这是什么意思?我怎样才能修复它们?

推荐答案

\ 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

你不能在需要反斜杠的时候就在字符串中加反斜杠.如果反斜杠后面没有一个有效的转义序列,则反斜杠无效.例如\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"

Docstrings是另一个需要记住的:Docstrings也是字符串文字,而无效的\个序列在Docstrings中也是无效的!如果docstring包含\,则使用原始字符串(r"""...""")作为docstring.

Python-3.x相关问答推荐

错误2没有这样的文件或目录website_content.txt""

是否有必要使用Threads()中的args显式地将共享变量传递给Python中的线程函数或直接访问它?

为什么不能用格式字符串 '-' 绘制点?

在新数据帧上自动提取两个字符串 python 之间的相等性

平移数组

如何在 Python 中 cv2 的窗口标题上动态更新 FPS

如何在pyspark的列中按连续1分组并保持具有特定大小的组

用于 BIG 数组计算的多处理池映射比预期的要慢

在 jupyter notebook 的单元格中使用 sudo

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

UnicodeDecodeError:utf-8编解码器无法解码位置 1 的字节 0x8b:无效的起始字节,同时读取Pandas中的 csv 文件

pysftp vs. Paramiko

如何通过命令行将数组传递给python

cv2 python 没有 imread 成员

try 在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + zoom ,但担心我的方法不是 Pythonic 或不安全

混合全局/参数和名为top的函数的奇怪python行为

向 Python 函数添加属性的最佳方法

TypeError:只有整数标量数组可以转换为标量索引

如何为 Python 3.x 安装 psycopg2?

Beautifulsoup 的单元测试失败