在Python中格式化字符串时,"IndexError:元组索引超出范围"

sc2*_*c28 5 python string-formatting

我查看了具有此IndexError的类似问题,但没有找到我的案例的解释.有人可以解释我为什么会收到错误吗?

以下代码

mySF2[0]=['000browser', '1', 'Floor', '0.92', '1.74', 'con', 'None']

insertfmt = ' '.join([
"INSERT INTO mySchema.myTable_{}_name (col1, col2, col3, col4, col5, col6)",  
"VALUES ({}, {}, NULLIF({},'None')::decimal, NULLIF({},'None')::decimal, {}, NULLIF({},'None')::int)"
         ])

insertfmt.format(mySF2[0])
Run Code Online (Sandbox Code Playgroud)

给出了这个错误

IndexError:元组索引超出范围

但是,我会计算7个占位符(即大括号{})和7个要输入的项目.为什么错误呢?感谢您的任何观点..

Ric*_*Xia 11

str.format()接受与格式字符串中"孔"数相对应的可变数量的参数.在您的情况下,您将传递一个参数(列表).format(),这会导致错误,因为它需要七个参数.

要将数组作为单独的参数传递给函数,您需要*像这样使用运算符:

insertfmt.format(*mySF2[0])
Run Code Online (Sandbox Code Playgroud)

  • 直接回答你的问题:如果你绝对确定你的字符串不包含任何特殊字符,例如转义单引号,你可以使用`repr()`函数打印出对象的Python表示.例如`repr('Floor')=="'Floor'"`.但是,我想指出将字符串插入表示类似SQL查询的格式字符串中容易发生SQL注入攻击.我强烈建议您使用一个安全地将参数转义为SQL语句的库,以便恶意输入不能执行任意SQL语句. (2认同)