簡體   English   中英

AttributeError: 'NoneType' 對象沒有屬性 '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(..)返回Match對象(它具有.group(x)方法等)或None如果找不到匹配項。 在您的情況下,錯誤意味着返回None ;)

好的,這意味着正則表達式模式不適用於測試的數據。 我已經調試了你的兩種情況,我注意到在第一個腳本中你應用的模式is "flash:c2900-但在第二個例子中你正在測試針對file 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM