如何在Python 3中修复运行munch函数的错误

2024-05-07 06:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个现有的工作项目中理解以下简化的python代码片段。代码将在下面的代码下面抛出错误。如果有人能教我如何修理它,我将不胜感激。事先非常感谢。你知道吗

from munch import Munch
imp_command = "impala-shell -k -i edgenode01 --ssl -B -q 'select * from "
file_name = 'file_name'

def run(name, cmd, parms):
        parms = imp_command + file_name + ";'"
        lower_parms = Munch()
        for parm in parms:
                lower_parms[parm.lower()] = parms[parm]
        parms = lower_parms
        print(parms)

run('Name', 'CMD',{imp_command + '${DB}.${VERSION}_' + file_name + ";'"} )

错误:

Traceback (most recent call last):
  File "./test.py", line 13, in <module>
    run('Name', 'CMD',{imp_command + '${DB}.${VERSION}_' + file_name + ";'"} )   
  File "./test.py", line 9, in run
    lower_parms[parm.lower()] = parms[parm]
TypeError: string indices must be integers

更新20190127:

原始项目被设置为使用Munch以某种方式在run命令中生成CMD,{DB}和{VERSION}在一个单独的配置文件中定义,最终脚本将导入另一个实用程序来读取配置,因此请假定{DB}和{VERSION}是字符串。你知道吗

现有格式(或用法)在函数def run(name, cmd, parms)中定义。你知道吗

示例如下:

imp_command = "impala-shell -k -i edgenode01 --ssl -B -q 'select * from "
file_name = 'file_name'

task.run('Select SQL table in Impala', 'ImpalaCommand', {'CMD': imp_command + '${DB}.${VERSION}_' + file_name})

name和cmd是字符串 参数将是imp_command+'${DB}.${VERSION}.'+file_name+“;'” 在run(name,cmd,parms)之后,我希望得到以下字符串:

"impala-shell -k -i edgenode01 --ssl -B -q 'select * from file_name ;'"

文件名用作impala数据库中的表名。你知道吗


Tags: runnameinfromcmddbversionlower
1条回答
网友
1楼 · 发布于 2024-05-07 06:25:06

如错误消息所述,您正在尝试使用非整数的索引对字符串值进行索引。你知道吗

在代码中,parms是一个字符串。在循环for parm in parms中,parm是该字符串的一个字符。在该循环中,您尝试计算表达式parms[parm]。变量parms是字符串,但parm是字符,而不是整数。这样你就得到了错误。你知道吗

我不知道你想做什么,所以我不知道纠正的方法是什么。错误可能在parms的定义中,在for循环中的parm的定义中,或者在表达式parms[parm]中。在函数定义中应该有一个doc字符串,这将大大提高可理解性。一些评论也会有所帮助。你知道吗

相关问题 更多 >