生成Python脚本的Python脚本 - 生成代码的评估

时间:2016-04-19 15:14:25

标签: python-2.7

我有以下代码

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)作为元组的一部分。

如果有人感兴趣,我正在尝试模拟找到的代码here

1 个答案:

答案 0 :(得分:1)

这似乎是尝试动态构建对函数的引用的问题。

您想要创建一个rfc1902.integer对象,该对象作为参数传递给cmdgen.UdpTransportTarget。问题是,dataType的值是一个字符串,而不是可调用的。评估完所有代码后,您最终会得到:

'rfc1902.integer'(value)

当你真正想要的是这个:

rfc1902.integer(value)

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

  1. load it使用getattr
  2. load it使用dict“switch statement。”