很明显,我正在使用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。)
答案 0 :(得分:2)
字节字面量使用\
作为转义字符,与字符串字面量一样。与它们类似,您必须使用原始字节串文字rb'\d'
或使用双反斜杠b'\\d'
。
来自https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
用简单的英语:两种文字都可以包含在匹配中 单引号(
'
)或双引号("
)。它们也可以包含在 三个单引号或双引号的匹配组(通常是 称为三引号字符串)。反斜杠(\
)字符是 用于转义具有特殊含义的字符,例如 作为换行符,反斜杠本身或引号字符。