Telnetlib,字节串和“无效的转义序列”

时间:2018-11-09 09:45:48

标签: python regex string expect telnetlib

很明显,我正在使用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。)

1 个答案:

答案 0 :(得分:2)

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

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

  

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