天天看點

TypeError: expected string or bytes-like object

TypeError: expected string or bytes-like object

報錯代碼:

def json(self,strs, key):

    #print(type(strs))
    strs =str(strs)
    strs = re.sub("'",'"',strs)
    #print(strs)
    dict_ = json.loads(strs)
    if dict_:
        return list(i[key] for i in dict_)
    else:
        return np.NaN
           

原因是strs是非字元或者非bytes-like,我的錯誤是非字元,但是比較難想到的他是空值,是以在資料處理前應按部就班,先好好地處理空值,再進行下一步,不然就被自己坑死了。

代碼優化:

def json(self,strs, key):
#改了下面兩行
    if type(strs) ==float:
        return []
    #print(type(strs))
    strs =str(strs)
    strs = re.sub("'",'"',strs)
    #print(strs)
    dict_ = json.loads(strs)
    if dict_:
        return list(i[key] for i in dict_)
    else:
        return np.NaN
           

也就是添加了一個處理空值的判斷條件,因為空值被分類在浮點型裡面,是以孔易用type來判斷,欲知詳情百度一下==“np.NaN==np.NaN”==吧。

繼續閱讀