Python 拥有众多方便的标准库,这是它强大的地方同时也留下很多陷阱。
1. strip
从中文教程文档描述来看,该方法应该是去除头尾的字符序列
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
官方注释也差不多是这个意思
strip(...)
S.strip([chars]) -> str
Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.
接下来执行这段代码
s = "hello world //s , hehehe"
print( s.strip("hello world") )
希望得到这个输出
//s , hehehe
而实际输出
//s ,
这是很多人误会的地方,上面的代码其实等价于这段代码。strip 去除的字符,并不是去除头尾的字符串,如果头尾单个字符在字符序列 "helowrd " 中就会被去除,然后接着判断下一个字符
s = "hello world //s , hehehe"
print(s.strip("helowrd "))
2. json.dumps
json.dumps 是可以将 dict, list, int ... 等转换成 str 类型的方法,但是容易让人忽视转换实例对象的时候会报错。
import json
class T:
def __str__(self):
return "i am class"
t = T()
d = {
"id" : 1,
"class": t
}
print( type(json.dumps(d)) )
TypeError: Object of type 'T' is not JSON serializable
如果不确定转化的类型中是否包含实例对象 ,有两个方法可以避免报错:
(1)参数指定default
json.dumps(d, default=lambda x: "null"))
(2)使用第三方库 ujson 代替 json。
pip install ujson
import json
import ujson
json.loads = ujson.loads
json.dumps = ujson.dumps
class T:
def __str__(self):
return "i am class"
t = T()
d = {
"id" : 1,
"class": t
}
print( json.dumps(d) )
{"id":1,"class":{}}