Python TypeError: not all arguments converted during string formatting ——元组tuple(a)和(a,)的区别

时间:2021-09-02 23:19:44

今天写程序,想输出一个array的shape,原程序为:

print('shape of testUImatrix:%s\nStart to make testUImatrix...'%(testuimat.shape))

结果报错:

 TypeError: not all arguments converted during string formatting

这句话有什么问题嘛??感觉有点奇怪,之后google到了这个网页https://segmentfault.com/q/1010000000334606 , 觉得答案挺有价值的,也解决了我一直以来的一个困惑,即元组tuple(a)和(a,)的区别

原来(摘抄):

python认为用","连接起来的全部都认为是元组,()只是便于程序员感知的一个符号而已。回到上面的问题
print "%s,%s" % (a,b)
这里a,b python认为它是一个元组整体c=(1,('2','3')),不再作为两个单独的对象。那么对元组c里每个值都单独格式化,第一个%s就是c的第一个值1,第二个就是c的第二个值('2','3')
print "%s" % b
对元组b里每个值都单独格式化,b有两个值,而%s只有一个所以会报错。
print "%s" % (b,)
实际上(b,)被当成了一个只有元素b的元组,因此这种写法也能正确print整个元组。