Python遍历元组生成对应参数文件名时触发tuple格式化错误
问题描述
编写for循环代码实现基于元组迭代运行函数,每次迭代修改指定参数后保存运行输出,要求每次迭代的输出文件名与当前迭代传入的参数值匹配。已简化非核心代码,报错位置前的所有代码均可正常运行。
问题代码
#define tuple range_length = (50, 75) for i in range_length: evs.set_module('A2_ra_Ind_krig_3d', 'Krig Settings', 'Range': i}) evs.set_module('A2_ra_Ind_krig_3d', 'Properties', 'Execute', True) #Where error is file_string = '\\\\C:\\A2_Radium_Range_{0:.0f}'.format(range_length) evs.set_module('write evs field', 'Properties', 'Filename', file_string)
运行报错
TypeError: unsupported format string passed to tuple.__format__
报错原因
字符串格式化占位符{0:.0f}要求传入数值类型参数,但代码中传入了整个元组对象range_length,Python不支持对元组做这类数值格式化操作。
另外循环的迭代变量是i,每次循环中i才是元组内当前遍历到的单个参数值,传入整个元组本身也不符合“文件名匹配当前迭代参数值”的需求。
修复方法
- 将字符串格式化时传入的参数从元组
range_length替换为当前迭代变量i - 修正路径字符串的错误前缀:Windows本地磁盘路径不需要开头额外的双反斜杠转义,原写法会生成无效路径
- 补全原代码中字典参数缺失的左大括号(原代码
'Range': i}前漏写{,会触发语法错误)
修复后的对应代码段:
#define tuple range_length = (50, 75) for i in range_length: # 补全字典缺失的左大括号 evs.set_module('A2_ra_Ind_krig_3d', 'Krig Settings', {'Range': i}) evs.set_module('A2_ra_Ind_krig_3d', 'Properties', 'Execute', True) # 传入当前迭代值i,修正路径前缀 file_string = 'C:\\A2_Radium_Range_{0:.0f}'.format(i) # 可根据实际输出格式补充文件后缀,例:file_string += '.fld' evs.set_module('write evs field', 'Properties', 'Filename', file_string)
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

