前言
“你应该常回头看看,才不至于迷失。”——这是我近些日子工作中总结出的句子。
我在Python中总爱追求那些高大上的东西,什么元编程,什么异步,什么描述符……其实自己连最基本的语法也遗忘了。
说来惭愧!若不是组内测试人员的“胡搅蛮缠”,我可能会永远困顿在自己的骄傲自满里。好在终究在别人的敲击下清醒过来。下面有两个极小问题引发的报错,书此以谨记之!
字符串转字典
json.loads()
函数我们还是用得频繁的,大多时候,都是把字典格式的字符串转换成字典类型,这样说起来有些迷糊,其实也就是这样:'{}' --> {}
。
通常,字典格式的字符串来自于读取文本,另些时候也乘坐http协议而来。但我们不用在意它来自哪里,直接json.loads()
就OK。——事实上,Python解释器替我们做了小小的事,我们没注意而已。
json.loads()
函数要求,其传入参数字符串,必须单引号在外而双引号在内(尽管Python一直强调自己不区分单双引号,其实不总是如此)
import json
json.loads('{"ty":512, "yx": 829}') # 正确
如果你偏要反着来,解释器会给你JSONDecodeError的异常,就像下面这样:
json.loads("{'ty':512, 'yx': 829}") # 错误
JSONDecodeError......
这样的结论是适用于Python2.7和Python3.7的,我也只在俩环境中测试过。
同时,json.loads()也可以把列表格式的字符串转成列表类型,也要求单引号在外:
json.loads('["ty", "yx"]') # 正确
# ***********************************
json.loads("['ty', 'yx']") # 错误
ValueError......
019.1.22说明
今天咨询了一个前端的朋友,了解到有JSON风格指南这一东西,里边很清楚的说明了一个要求:
这也就是会出现上述问题的原因。
字符串转数字
业务代码中,将字符串转数字是常需要的操作。Python解释器对此操作的要求似乎颇为严格。
首先,我们知道以下转换是OK的:
int("0")
int("10")
int("123")
而这样就不OK了:
int("a") # 错误
int("[]") # 错误
ValueError......
事实上,浮点型格式的字符串也不能被int()转换为整数型。 也就是说,下面这样会报错:
int("512.0") # 错误
ValueError......
真有些不解,明明int()
函数都可以传入浮点型的数字实现取整,但浮点型格式的字符串却不能被处理。
此时此刻,float()
函数充分发挥了它包容的特性:
float("512") # 512.0
float("3.14") # 3.14
还不快抢沙发