Python读取JSON值时变量意外变为元组的问题求助
解决Python读取JSON参数时变量被赋值为元组的问题
嘿,我来帮你搞定这个问题!首先得说,你遇到的问题根源是赋值语句的写法错误,导致Python把多个变量的赋值当成了元组打包操作,才会出现前两个变量变成元组的情况。
问题出在哪?
看你代码里的这行:
logfile = item['log'], connectionfile = item['connection'], query_redshift_library = item['query_redshift_library']
在Python里,逗号是用来创建元组的符号,这行代码会被解析成把后面所有内容打包成一个元组,然后赋值给logfile——这就导致logfile变成了包含多个元素的元组,而后面的变量其实没有被正确独立赋值(甚至可能触发语法错误)。
两种修复方法
方法1:拆分独立赋值(推荐)
最清晰不易出错的方式,把每个变量的赋值拆成单独的语句:
with open('etl-parameters','r') as userinfo: params = json.load(userinfo) # 这里把变量名改成params,避免后面循环覆盖原变量 for key, extraction in params.items(): # 用key代替param当循环变量,避免冲突 if "ETL" in key: for item in extraction: process = item['etl-process'] stored_query = item['stored-query'] elif "configfiles" in key: for item in extraction: # 每个变量单独赋值,确保都是字符串 logfile = item['log'] connectionfile = item['connection'] query_redshift_library = item['query_redshift_library']
这样每个变量都会拿到JSON里对应的字符串路径,不会再出现元组的情况。
方法2:多变量解包(一行完成)
如果你想在一行里完成赋值,可以用Python的多变量解包语法,注意左右两侧的顺序要完全对应:
elif "configfiles" in key: for item in extraction: logfile, connectionfile, query_redshift_library = item['log'], item['connection'], item['query_redshift_library']
这种写法会把右侧的三个字符串依次赋值给左侧的三个变量,每个变量都是单独的字符串类型。
额外提醒:避免变量名冲突
你原来的代码里用param作为循环变量,覆盖了之前从JSON加载的param变量,这可能会导致后续逻辑出现莫名其妙的问题,所以我在修复代码里把原变量改成了params,循环变量用key代替,这样更安全。
内容的提问来源于stack exchange,提问作者Andres Urrego Angel
相关产品推荐
相关产品推荐

