AttributeError: 'NoneType' object has no attribute 'group' ,
AttributeError: 'NoneType' object has no attribute 'group' ,
我正在尝试通过 Netmiko 获取 cisco 版本。
import re
from netmiko import ConnectHandler
iosv_l3 = {
'device_type': 'cisco_ios',
'ip': 'my ip',
'username': 'username',
'password': 'password',
'secret': 'enable password'
}
net_connect = ConnectHandler(**iosv_l3)
net_connect.enable()
output = net_connect.send_command('show version | include flash')
print(output)
x = re.search(r'["]flash:/(.*)["]',output).group(1)
print(x)
net_connect.disconnect()
Netmiko 可以成功SSH 到Cisco 设备。我可以看到 print(output):
的输出
System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"
但是,代码导致错误:
x = re.search(r'["]flash:/(.*)["]',output).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
我创建了一个测试文件来测试正则表达式:
import re
txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin\""
txt = re.search(r'["]flash:/(.*)["]',txt).group(1)
print(txt)
测试打印 "c2900-universalk9-mz.SPA.156-3.M6.bin" 正确。
>>> import re
>>> txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"
>>> txt = re.search(r'["]flash:/(.*)["]',txt).group(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> print(txt)
System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin
>>>
>>>
显然 output
不包含预期内容。
没有比赛。该对象是一个 NULL 对象。
先测试匹配:
import re
txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin\""
match = re.search(r'["]flash:/(.*)["]',txt)
if ( match ) :
print(match.group(1))
else :
print("No match")
方法 re.match(..)
returns Match
对象(具有 .group(x)
方法等)或 None
以防找不到匹配项。在您的情况下,错误意味着已返回 None
;)
好的,这意味着正则表达式模式不适用于测试的数据。我已经调试了你的两种情况,我注意到在第一个脚本中你将模式应用于 is "flash:c2900-
但在第二个例子中你正在测试正则表达式对 file is \"flash:/c2900
其中 flash:
和 c2900
我们有一个额外的 /
,它在第一个示例中不存在。
好的,所以有 2 种方法可以修复它 - 如果您想使用和不使用相同的正则表达式/
,可以这样
import re
output = 'System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/?(.*)"', output).group(1))
output = 'System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/?(.*)"', output).group(1))
使用可选的正则表达式匹配 (?
)。
如果您只想使用 /
或不使用这些示例,您都可以使用这些示例。
import re
output = 'System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:(.*)"', output).group(1))
output = 'System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/(.*)"', output).group(1))
我正在尝试通过 Netmiko 获取 cisco 版本。
import re
from netmiko import ConnectHandler
iosv_l3 = {
'device_type': 'cisco_ios',
'ip': 'my ip',
'username': 'username',
'password': 'password',
'secret': 'enable password'
}
net_connect = ConnectHandler(**iosv_l3)
net_connect.enable()
output = net_connect.send_command('show version | include flash')
print(output)
x = re.search(r'["]flash:/(.*)["]',output).group(1)
print(x)
net_connect.disconnect()
Netmiko 可以成功SSH 到Cisco 设备。我可以看到 print(output):
的输出System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"
但是,代码导致错误:
x = re.search(r'["]flash:/(.*)["]',output).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
我创建了一个测试文件来测试正则表达式:
import re
txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin\""
txt = re.search(r'["]flash:/(.*)["]',txt).group(1)
print(txt)
测试打印 "c2900-universalk9-mz.SPA.156-3.M6.bin" 正确。
>>> import re
>>> txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"
>>> txt = re.search(r'["]flash:/(.*)["]',txt).group(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> print(txt)
System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin
>>>
>>>
显然 output
不包含预期内容。
没有比赛。该对象是一个 NULL 对象。
先测试匹配:
import re
txt = "System image file is \"flash:/c2900-universalk9-mz.SPA.156-3.M6.bin\""
match = re.search(r'["]flash:/(.*)["]',txt)
if ( match ) :
print(match.group(1))
else :
print("No match")
方法 re.match(..)
returns Match
对象(具有 .group(x)
方法等)或 None
以防找不到匹配项。在您的情况下,错误意味着已返回 None
;)
好的,这意味着正则表达式模式不适用于测试的数据。我已经调试了你的两种情况,我注意到在第一个脚本中你将模式应用于 is "flash:c2900-
但在第二个例子中你正在测试正则表达式对 file is \"flash:/c2900
其中 flash:
和 c2900
我们有一个额外的 /
,它在第一个示例中不存在。
好的,所以有 2 种方法可以修复它 - 如果您想使用和不使用相同的正则表达式/
,可以这样
import re
output = 'System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/?(.*)"', output).group(1))
output = 'System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/?(.*)"', output).group(1))
使用可选的正则表达式匹配 (?
)。
如果您只想使用 /
或不使用这些示例,您都可以使用这些示例。
import re
output = 'System image file is "flash:c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:(.*)"', output).group(1))
output = 'System image file is "flash:/c2900-universalk9-mz.SPA.156-3.M6.bin"'
print(re.search(r'"flash:/(.*)"', output).group(1))