每次我使用print "in some_function. x: %s" % x
来调试某些python程序(通常是Python 2.5或Python 2.6)时,如果x
是一个元组,我的程序就会崩溃。为什么?在我的代码中添加打印件时如何避免这种情况?
答案 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,)
修复它因为现在使参数成为包含单个元素的元组,该元素本身就是一个元组。