两个不经意间的报错

Python 小记 2019-01-21 1673 字 1524 浏览 点赞

前言

“你应该常回头看看,才不至于迷失。”——这是我近些日子工作中总结出的句子。

我在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


本文由 Guan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论