关于格式化元组数据的一个坑

关于格式化元组数据的一个坑

问题描述

这里有一个关于元组格式化输出的问题,直接看下面代码:
tu = ('w','h','w')
lis = ['w','n','m']
s1 = '列表数据:%s,元组数据:%s' % (lis,tu)
print(s1)
输出的结果为:
列表数据:['w', 'n', 'm'],元组数据:('w', 'h', 'w')
乍一看没得啥子问题,但是如果我们只格式化输出元组中的数据试试:
tu = ('w','h','w')
s2 = '元组数据:%s' % tu
print(s2)
结果会报错:
TypeError: not all arguments converted during string formatting
但是我们直接格式化输出列表就没问题:
lis = ['w','n','m']
s3 = '列表数据:%s' % lis
print(s3)
结果:
列表数据:['w', 'n', 'm']

原因分析:

Python元组本身的问题

究其根本原因,其实是Python元组本身的一个BUG:
print((123,),type((123)))
print(('abc',),type(('abc')))
print(([11,22,33],),type(([11,22,33])))
结果为:
(123,) <class 'int'>
('abc',) <class 'str'>
([11, 22, 33],) <class 'list'>
参照上面的代码,我们发现,(123)(‘abc‘)([11,22,33])这三个数形式上是元组,因为它们都被小括号包起来了。但是打印的结果却是被包起来的数据类型的本身。而解决这个问题的方法就是在单个数据后面加上一个逗号:
print((123,),type((123,)))
print(('abc',),type(('abc',)))
print(([11,22,33],),type(([11,22,33],)))
结果为:
(123,) <class 'tuple'>
('abc',) <class 'tuple'>
([11, 22, 33],) <class 'tuple'>
在每个单个数据后加上逗号后,数据的类型变成了我们想要的tuple

格式化元组的问题

再回到我们上面的问题中来,如果我们把一个元组当做格式化的对象,python解释器其实是把元组里面的每个元素当做参数去格式化的,也就是说需要一一去匹配操作符,而前面只有一个操作符,数量少于元组中的元素,因此会抛出上面的错误。

解决方法

针对上述情况,解决方法有两个:如果想把元组当成一个整体输出,可以处理一下元组输出的格式;如果想把元组中的数据一一格式化出来,可以在前面补全操作符。

处理元组的输出格式

直接上代码:
tu = ('w','h','w')
s2 = '元组数据:%s' % (tu,)
print(s2)
结果如下:
元组数据:('w', 'h', 'w')

补全操作符的方法

tu = ('w','h','w')
s2 = '元组数据:%s %s %s' % tu
print(s2)
结果如下:
元组数据:w h w

原文地址:https://www.cnblogs.com/paulwhw/p/10679055.html

时间: 2024-11-02 11:42:50

关于格式化元组数据的一个坑的相关文章

关于处理日期格式化问题遇到的一个坑

下面记录了一个自己在写日期格式化的过程中一直没有看出来的问题,后来经过自己仔细检查,终于发现了问题所在. 原来是自己传入的格式化的字符串不规范.下图,展示了错误的写法和正确的写法.

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

EasyUI datagrid 格式化显示数据

http://blog.163.com/[email protected]/blog/static/103242241201512502532379/ 设置formatter属性,是一个函数,格式化函数有3个参数: The cell formatter function, take three parameters:value: the field value.rowData: the row record data.rowIndex: the row index. 一.格式化显示性别 后台传过

《懒人Shell脚本》之七——格式化处理数据存入数据库实现

0.引言 实际应用开发中遇到:将非格式化的文件数据存储到数据库中.对于传统的格式化的数据:ini/json/xml我们都有现成的类库去实现.而对于如下非格式化的数据呢?以下是我的思考与实现. 数据截取片段如下所示: [[email protected] 2017]# head -n 10 input.txt [url]http://epaper.tianjinwe.com/mrxb/mrxb/2013-02/21/content_7566593.htm 新报讯[记者王晶通讯员赵子强]对31.66

记学习PHP掉进去的第一个坑

从前几天开始刚开是学习PHP,就经历了一个坑,让人确实挺郁闷的,主要是因为开发环境的问题. 直接切入正题. =================================================================================================== 实验环境:PHPStorm2016 + Xampp 在学习使用表单的post方法接受数据一节时,怎么也接受不到数据,不知道怎么回事.代码如下 <form name="form1"

MySQL JDBC的queryTimeout的一个坑

遇到一个MySQL JDBC的queryTimeout的坑,比较恶心,算是它的BUG,也可以不算,^_^,为啥这么说?看一下下面的解释: 现象: 用同一个Connection执行大批量SQL的时候,导致了OOM现象. 细节现象描述: 1.SQL是从某个存储设备上拿到的,不会直接占用大量的内存,每次只会取最多1千条数据过去,也会判定容量不超过多少M. 2.每一批SQL执行会单独创建Statement对象,执行一批SQL后,会将这个Statement关闭掉. 3.SQL语句中只有insert,没有其

SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息

在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.springframework.org/schema/mvc" 一.作用: 1.会自动注册 RequestMappingHandlerMapping.RequestMappingHandlerAdapter 以及 ExceptionHandlerExceptionResolver 三个 Bean. 若配置该注

vim调用python格式化json数据

vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按序列化json格式数据. 服务器返回的json数据是非格式化的,程序使用没问题,如果需要阅读则亚历山大. 可以使用vim调用python json模块提供的命令行工具json/tool.py格式化json文本. vim打开json数据,命令行模式下 :%!python3 -m json.tool %

使用ffmpeg视频编码过程中踩的一个坑

今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,很多时候一旦思维定势真的挺难突破的.下面是不正确的编码结果: 使用ffmpeg做视频编码过程中,首先要新建数据帧,并为数据帧分配相应内存,以便于保存图像数据,为数据帧分配内存需要用到av_image_alloc()这个函数,该函数将根据传入的图像宽.高.图像格式.数据对齐基数等参数进行内存分配. 这其中有一个参数可能会让人迷惑,那就是数据对齐基数这个参数该设置多少?顺便说说为什么要数据对齐,之所以要对齐,主要