解決TypeError: can only concatenate str (not “bytes”) to str
錯誤提示:
pic_content = pic_content+f.read()
TypeError: can only concatenate str (not “bytes”) to str
首先來看代碼:
text_content = '''HTTP/1.x 200 OK Content-Type: text/html <head> <title>WOW</title> </head> <html> <p>Wow, Python Server</p> <IMG src="test.jpg"/> </html> ''' f = open('test.jpg', 'rb') pic_content = ''' HTTP/1.x 200 OK Content-Type: image/jpg ''' pic_content = pic_content+f.read()
rb:也即 binary mode,read()操作返回的是bytes
但是pic_content是 str類型的,所以這時候可以通過在pic_content字符串前加 b,把字符串類型轉換成bytes 類型。
錯誤解決。
錯誤提示:
method = request.split(’ ')[0]
TypeError: a bytes-like object is required, not ‘str’
s.listen(3) conn, addr = s.accept() request = conn.recv(1024) method = request.split(' ')[0] src = request.split(' ')[1]
由代碼塊:recv 函數的返回值是 bytes 類型。
request是個bytes類型,但是split是對str進行操作的,所以此時要把bytes類型轉換成str。也就是要對request 進行 decode操作:
request.decode()
修改兩行代碼 錯誤解決。
method = request.decode().split(' ')[0] src = request.decode().split(' ')[1]
u"我是含有中文字符組成的字符串。"
作用:后面字符串以 Unicode 格式 進行編碼,一般用在中文字符串前面,防止因為源碼儲存格式問題,導致再次使用時出現亂碼。
r"\n\n\n\n” # 表示一個普通生字符串 \n\n\n\n,而不表示換行了。
作用:去掉反斜杠的轉譯機制。
(特殊字符:即那些,反斜杠加上對應字母,表示對應的特殊含義的,比如最常見的”\n”表示換行,”\t”表示Tab等。 )
應用:常用於正則表達式,對應着re模塊。
response = b'<h1>Hello World!</h1>' # b' ' 表示這是一個 bytes 對象
作用:b" "前綴表示:后面字符串是bytes 類型。
用處:網絡編程中,服務器和瀏覽器只認bytes 類型數據。
如:send 函數的參數和 recv 函數的返回值都是 bytes 類型
在 Python3 中,bytes 和 str 的互相轉換方式:
str→bytes:encode()方法。str通過encode()方法可以轉換為bytes。
bytes→str: decode()方法。bytes通過decode()方法可以轉換為str。
import time t0 = time.time() time.sleep(1) name = 'processing' #以 f開頭表示在字符串內支持大括號內的python 表達式 print(f'{name} done in {time.time() - t0:.2f} s')
輸出:
processing done in 1.00 s