Python脚本生成Python脚本-对生成的代码进行评估



我有以下代码

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)

要获得可调用,您有两个选项

  1. 使用getattr加载
  2. 使用dict"switch语句"加载它

最新更新