今天在學習Python的時候,報了這樣一個錯誤,我先申明一下我用的python版本是3.7。
具體錯誤如下:
F:\Python3.7.0\python.exe F:/python/21.py
<class 'str'>
Traceback (most recent call last):
File "F:/python/21.py", line 10, in <module>
os.write(fd, str)
TypeError: a bytes-like object is required, not 'str'
上面最后一句話的意思是“類型錯誤:需要類似字節的對象,而不是字符串”。

報錯原因:
在這里,python3和Python2在套接字返回值解碼上有區別。
解決辦法:
解決辦法非常的簡單,只需要用上python的bytes和str兩種類型轉換的函數encode()、decode()即可!
- str通過encode()方法可以編碼為指定的bytes;
- 反過來,如果我們從網絡或磁盤上讀取了字節流,那么讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法;
因此:我只需要把上圖中的代碼改成下面的即可!
import os,sys
#打開文件
fd = os.open('foo.txt',os.O_RDWR|os.O_CREAT)
str = 'this is test'
str = str.encode()
#寫入字符串
os.write(fd,str)
#關閉文件
os.close(fd)
print('關閉文件成功!')
還有一種方法也可以實現,具體代碼如下:
str = 'this is test'
os.write(fd,bytes(str,'UTF-8'))
|