我有以下代码
def SetSnmpOid(oid, snmpDataType, value):
try:
global SNMP_COMMUNITY
global SNMP_HOST
global SNMP_PORT
cmdGen = cmdgen.CommandGenerator()
# Send to first Telnet IP address, different port for SNMP
dataType = "rfc1902." + snmpDataType
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData(SNMP_COMMUNITY, mpModel=0),
cmdgen.UdpTransportTarget((SNMP_HOST, SNMP_PORT)),
(oid + "." + str(0), dataType(value)))
当运行时,会生成此错误
File "H:/code/test_script.txt.py", line 105, in SetSnmpOid
(oid + "." + str(0), dataType(value)))
TypeError: 'str' object is not callable
并且我确信该错误指的是dataType
(其评估为rfc1902.integer
,这是正确的)。问题似乎是将它用作函数调用dataType(value)
作为元组的一部分。
如果有人感兴趣,我会尝试模仿这里的代码。
这看起来像是试图动态构建对函数的引用的问题。
您想要创建一个rfc1902.integer
对象,该对象作为参数传递给cmdgen.UdpTransportTarget
。问题是,dataType
的值是一个字符串,而不是可调用的。一旦对所有代码进行了评估,您将得到以下结果:
'rfc1902.integer'(value)
当你真正想要的是:
rfc1902.integer(value)
要获得可调用,您有两个选项
- 使用
getattr
加载 - 使用dict"switch语句"加载它