1
我在其中一個python腳本中遇到了一些奇怪的行爲。python意想不到printType中的NoneType
我有一個函數可以計算交換機端口上最後一個接口的連接日期。
def last_change(self):
"""
Gets the date from the last time the interface status changed.
ifLastChange time is relevant to sysUpTime and should thus be calculated as: sysUpTime-ifLastChange/100
The ifLastChange and sysUpTime values are `Ticks` and should be handled as UNIX-Time
:return: Date as string. Format DD.MM:YYYY hh:mm:ss
"""
self.snmp_obj.mib = 'IF-MIB'
self.snmp_obj.mib_object = 'ifLastChange'
self.snmp_obj.match = self.ifindex
snmp_response = self.snmp_obj.snmp_get_specific()
sys_ticks = Switch.uptime(self)
int_ticks = snmp_response[1].strip("'")
tick_diff = int(sys_ticks) - int(int_ticks)
chtime = datetime.timedelta(seconds=tick_diff/100)
print((datetime.datetime.today() - chtime).strftime('%d.%m.%Y %H:%M:%S'))
return str((datetime.datetime.today() - chtime).strftime('%d.%m.%Y %H:%M:%S'))
我打電話給我的interface
對象的功能在我的代碼如下:
print(interface.last_change())
print('HOSTNAME: ' + device_hostname +
'\nUSERNAME: ' + device_user +
'\nIFNAME: ' + ifname +
'\nIFINDEX: ' + ifindex +
'\nBPI: ' + bpi +
'\nIFSTATUS: ' + ifstatus +
'\nVLAN: ' + ifvlan +
'\nMAC: ' + mac_address +
'\nTRUNKSTATUS: ' + trunk_status +
'\nPORTSEC_STATE: ' + interface.portsec_state() +
'\nPORTSEC_STATUS: ' + interface.portsec_status() +
'\nMAXMAC: ' + interface.max_macaddresses() +
'\nLAST_CHNAGE: ' + interface.last_change())
現在有趣的是,print(interface.last_change())
的作品,但在「大」 print()
功能將引發一個錯誤。
02.07.2016 10:09:27
Traceback (most recent call last):
File "portfynder.py", line 171, in <module>
main()
File "portfynder.py", line 140, in main
'\nLAST_CHNAGE: ' + interface.last_change())
TypeError: must be str, not NoneType
如在輸出端看到的上方,print(interface.last_change())
作品,並且還返回一個str
值(02.07.2016 10:09:27
)。但由於某種原因,它會在大print()
函數中返回NoneType
。
我不知道爲什麼會發生這種情況,有什麼想法?