我正在尝试进行模式搜索,如果匹配则在计数器值上设置一个bitarray。
runOutput = device[router].execute (cmd)
runOutput = output.split('\n')
print(runOutput)
for this_line,counter in enumerate(runOutput):
print(counter)
if re.search(r'dev_router', this_line) :
#want to use the counter to set something
收到以下错误:
如果是re.search(r' dev_router',this_line):
2016-07-15T16:27:13:%错误:文件 " /auto/pysw/cel55/python/3.4.1/lib/python3.4/re.py" ;,第166行,
在搜索中2016-07-15T16:27:13:%-ERROR:return _compile(pattern, 标志).search(字符串)
2016-07-15T16:27:13:%-ERROR:TypeError:期望的字符串或缓冲区
答案 0 :(得分:2)
你混淆了enumerate()
的参数 - 首先是索引,然后是项目本身。替换:
for this_line,counter in enumerate(runOutput):
使用:
for counter, this_line in enumerate(runOutput):
在这种情况下,您获得TypeError
,因为this_line
是一个整数,而re.search()
需要一个字符串作为第二个参数。为了证明:
>>> import re
>>>
>>> this_line = 0
>>> re.search(r'dev_router', this_line)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/.virtualenvs/so/lib/python2.7/re.py", line 146, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
顺便说一句,像PyCharm这样的现代IDE可以静态地检测出这类问题:
(此屏幕截图使用了Python 3.5)