字符串的几种格式化以及“not all arguments converted during bytes formatting”这种报错
原创
©著作权归作者所有:来自51CTO博客作者晚风_END的原创作品,请联系作者获取转载授权,否则将追究法律责任
字符串的几种格式化以及“not all arguments converted during bytes formatting”这种报错
首先,我们需要明确什么是字符串的格式化?从字面意思来说,字符串按照指定的格式输出,就是字符串的格式化。
我们可以经常见到在python以及各种编程语言中,都会提及字符串格式化以及序列的序列化,两者是类似的,序列化
在本文中不在解释,主要探讨字符串的格式化,那么,格式化的意义也就是用途是什么呢?
字符串格式化通常用在测试语句以及web开发,爬虫,数据库的写入读取操作等等。
例如,URL的拼接,URL的生成,程序内的变量生成的字符串检测是否正确等情况。
下面,开始代码演示
字符串拼接和参数方式:
a='hello'
b=123
print('a = ' + a)
#这个是字符串拼接形式,‘a=’和字符串a相加,字符串支持相加运算
print('a =',a)
#这个是print函数多个参数的形式,print()方法内可以传任意多个参数,参数之间以逗号,隔开
print('b =',b)
#这个是print函数多个参数的形式
print('b = '+b)
#这个是字符串拼接形式,但不会运行成功,报错,因为字符串和非类型数据不支持运算符拼接
#类似+号或者*号这样的运算符并不支持,需要手动判断数据的各个类型,因此这种方式不建议使用
TypeError: can only concatenate str (not "int") to str
占位符格式化方式:
a='hello'
b=123
print('a = %s' %a)
#%s表示任意字符的占位符
print('b= %s' %b)
#%s表示任意字符的占位符
print('a+b=%s' %(a+str(b)))
#不同格式数据必须先转换成字符串在相加
print('a = %s world' %a)
#输出为 hello world
print('a =%s \n' %a)
#输出为a=后面直接接换行
=================================================
#可以在字符串后直接接%s
a='hello%s'%'123'
print(a)
#输出为hello123
print('a=%s' %a)
#输出为:a=hello123
a='hello%s'%'hahahah'
print(a)
#输出为hellohahahah
格式化字符串时传递变量f方法:
b=123
b=[1,2,3]
#b是一个变量,任意类型
a=f'hello{b}'
#f表示format,简单粗暴的格式化,变量花括号括起来
#字符串前使用f这个方法,Python3开始支持,Python2.X不支持,切记。
print(a)
#输出为:hello[1, 2, 4]
=================================================================================
import random
a=['好人','坏人','男人','女人']
for i in random.choices(a):
print('我猜你是一个{}'.format(i))
#这里的i是一个变量,随机抽取一个人,打印出来,试试结果吧!
print('a =%s%s ' %(1,2))
#执行结果 a=12
==============================================
print('a =%s%s ' %(1))
#执行结果TypeError: not enough arguments for format string
#报错,没有足够的参数去格式化这个字符串
====================================================
print('a =%s%s ' %(1,2,3))
#执行结果:TypeError: not all arguments converted during string formatting
#报错,参数太多了 全部参数无法对应的格式化字符串
总结:使用占位符%s以及{}.format方式时,参数的要求个数和实际给定个数要保持一致,否则会报上面的两个错误,在操作数据库时,常常会给定参数过多,报第二个错误,因此需要加逗号,。