【问题标题】:Telnetlib, bytestrings, and "invalid escape sequence"Telnetlib、字节串和“无效的转义序列”
【发布时间】:2019-04-12 21:07:48
【问题描述】:

显然,我正在使用telnetlib.expect() 与一个以字节串响应的设备进行交互。除非我在传递给expect()(预编译或文字)的正则表达式中使用字节串,否则会生成异常:TypeError: cannot use a string pattern on a bytes-like object。然而,pycodestyle 抱怨这是W605 invalid escape sequence '\d',进一步阅读让我认为这将成为未来的 Python 语法错误。

总结:

telnetlib.expect([b'\d']) # OK, but W065
telnetlib.expect(['\d'] # TypeError
telnetlib.expect([r'\d'] # TypeError

有没有办法解决这个问题,还是 pycodestyle 完全错误?

(顺便说一句,除了抑制所有警告之外,似乎无法抑制 pycodestyle 中的 W065。)

【问题讨论】:

    标签: python regex string expect telnetlib


    【解决方案1】:

    字节字符串文字使用\ 作为转义字符,就像字符串文字一样。与它们非常相似,您必须使用原始字节字符串文字 rb'\d' 或使用双反斜杠 b'\\d'

    来自https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals

    简单的英语:两种类型的文字都可以包含在匹配中 单引号 (') 或双引号 (")。它们也可以封装在 三个单引号或双引号的匹配组(这些通常是 称为三引号字符串)。反斜杠 (\) 字符是 用于转义具有特殊含义的字符,例如 作为换行符、反斜杠本身或引号字符。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多