使用%添加打印语句会使我的程序崩溃?

时间:2013-10-10 19:08:26

标签: python string-formatting

每次我使用print "in some_function. x: %s" % x来调试某些python程序(通常是Python 2.5或Python 2.6)时,如果x是一个元组,我的程序就会崩溃。为什么?在我的代码中添加打印件时如何避免这种情况?

2 个答案:

答案 0 :(得分:2)

问题在于,当x是一个元组时,Python假定元组的元素是格式化字符串的参数。例如,如果我这样做

>>> "one: %s two: %s" % ('fish','chips')
'one: fish two: chips'

如果您希望Python替换整个元组,请将参数作为带有一个元素的元组传递给字符串:

>>> "This is a tuple: %s" % (('fish','chips'),)
"This is a tuple: ('fish', 'chips')"

最后的逗号将(x,)之类的结构与(x)区分开来。第一个是带有一个元素的元组,而第二个只是x

答案 1 :(得分:0)

原因是%右侧的实际参数应该是一个元组,因为左侧的字符串可以有多个占位符,用于填充元组的元素单参数版本实际上是一个特例。因此,当您将x放在那里并且它实际上是一个元组时,Python假设您提供了几个参数来填充占位符 - 只有没有多个占位符,因此例外。

使用(x,)修复它因为现在使参数成为包含单个元素的元组,该元素本身就是一个元组。

相关问题