Python循环ID列表生成Tableau PDF报错:'str'对象无'keys'属性
问题分析与解决
错误原因
- 第一个循环中,每次迭代都会覆盖
pdf_params变量,最终仅保留最后一个ID对应的参数配置,前面的所有配置都被丢失。 - 第二个循环遍历的是
pdf_params字典的键(字符串类型),但conn.query_view_pdf的parameter_dict参数要求传入完整的参数字典,而非单个字符串键,因此触发AttributeError: 'str' object has no attribute 'keys'。
修正后的代码
test_loop = ['202','475','78','20','10'] for item in test_loop: tableau_filter_value = parse.quote(item) # 为当前ID生成专属参数字典 pdf_params = { "pdf_orientation": "orientation=Landscape", "pdf_layout": "type=A4", "filter_vendor": f"vf_{tableau_filter_field}={tableau_filter_value}", } # 直接使用当前参数生成对应ID的PDF with open(f'output{item}.pdf', 'wb') as file: file.write(conn.query_view_pdf(view_id=pdf_view_id, parameter_dict=pdf_params).content)
关键修正点
- 将参数生成与PDF生成逻辑合并到同一个循环中,确保每个ID都能生成对应的参数字典并立即生成PDF。
- 使用
item(当前循环的ID值)作为PDF文件名的后缀,保证每个文件对应正确的ID。 - 直接将完整的
pdf_params字典传入parameter_dict参数,符合API要求。
内容的提问来源于stack exchange,提问作者pevdr
相关产品推荐
相关产品推荐

