1. 程式人生 > >TypeError: cannot use a string pattern on a bytes-like object

TypeError: cannot use a string pattern on a bytes-like object

dsm 模塊 odi nbsp mode IE python2 play ray

一勞永逸解決:TypeError: cannot use a string pattern on a bytes-like object

TypeError: cannot use a string pattern on a bytes-like object

python2和python3之間切換,難免會碰到一些問題,有些方法比如re模塊的findall要求傳入的是字符串格式的參數,urllib.request.urlopen(url).read()返回的是bytes類型(這個是python3中才有的類型,所以很多python2中的方法都相應更改了)的,這樣傳參就會報以上錯誤。

python3中Unicode字符串是默認格式(就是str類型),ASCII編碼的字符串(就是bytes類型,bytes類型是包含字節值,其實不算是字符串,python3還有bytearray字節數組類型)要在前面加操作符b或B;python2中則是相反的,ASCII編碼字符串是默認,Unicode字符串要在前面加操作符u或U

一勞永逸的解決方法就是根據你傳進來的參數自動辨別編碼格式,然後進行相應的解碼,就搞定啦:

import chardet   #需要導入這個模塊,檢測編碼格式
encode_type = chardet.detect(html)  
html 
= html.decode(encode_type[encoding]) #進行相應解碼,賦給原標識符(變量)

從str到bytes:調用方法encode().
編碼是把Unicode字符串以各種方式編碼成為機器能讀懂的ASCII字符串
從bytes到str:調用方法decode().

原文鏈接

TypeError: cannot use a string pattern on a bytes-like object