TypeError: Không thể kết nối str to byte trong python #
Python "TypeError: Không thể kết nối các byte" xảy ra khi chúng ta cố gắng kết hợp đối tượng byte và một chuỗi. Để giải quyết lỗi, giải mã đối tượng byte thành một chuỗi trước khi kết nối các chuỗi.
Dưới đây là một ví dụ về cách xảy ra lỗi.
Copied!
my_bytes = b'hello ' my_str = 'world' # ⛔️ TypeError: can't concat str to bytes result = my_bytes + my_str
Chúng tôi đã cố gắng sử dụng toán tử bổ sung [+] để kết hợp đối tượng byte và một chuỗi gây ra lỗi.
Các giá trị ở bên trái và bên phải cần phải là loại tương thích.
Một cách để giải quyết lỗi là chuyển đổi đối tượng byte thành chuỗi.
Copied!
my_bytes = b'hello ' my_str = 'world' # 👇️ decode bytes object result = my_bytes.decode['utf-8'] + my_str print[result] # 👉️ "hello world"
Phương thức byte.decode trả về một chuỗi được giải mã từ các byte đã cho. Mã hóa mặc định là utf-8
.
Ngoài ra, bạn có thể mã hóa chuỗi thành một đối tượng byte.
Copied!
my_bytes = b'hello ' my_str = 'world' result = my_bytes + my_str.encode['utf-8'] print[result] # 👉️ b"hello world"
Phương thức str.encode trả về một phiên bản được mã hóa của chuỗi dưới dạng đối tượng byte. Mã hóa mặc định là utf-8
.
Dù bằng cách nào, bạn phải đảm bảo rằng các giá trị ở phía bên trái và bên phải của toán tử bổ sung [+] là các loại tương thích [ví dụ: hai chuỗi].
Khi bạn chuyển đổi đối tượng byte thành một chuỗi, bạn có thể sử dụng các chuỗi chữ được định dạng.
Copied!
# 👇️ decode bytes object my_bytes = b'hello '.decode['utf-8'] my_str = 'world' result = f'{my_bytes} {my_str}' print[result] # "hello world"
Các chuỗi chữ được định dạng [F-Strings] Hãy cho chúng tôi bao gồm các biểu thức bên trong chuỗi bằng cách tiền tố chuỗi với f
.
Hãy chắc chắn để bọc các biểu thức trong niềng răng xoăn -
0.Copied!
my_bytes = b'hello ' my_str = 'world' # 👇️ decode bytes object result = my_bytes.decode['utf-8'] + my_str print[result] # 👉️ "hello world"
Nếu bạn không chắc chắn loại cửa hàng biến loại A nào, hãy sử dụng lớp
1 tích hợp.Copied!
my_bytes = b'hello ' my_str = 'world' # 👇️ decode bytes object result = my_bytes.decode['utf-8'] + my_str print[result] # 👉️ "hello world"
Copied!
# 👇️ decode bytes object my_bytes = b'hello ' print[type[my_bytes]] # 👉️ print[isinstance[my_bytes, bytes]] # 👉️ True my_str = 'world' print[type[my_str]] # 👉️ print[isinstance[my_str, str]] # 👉️ True
Loại loại trả về loại của một đối tượng.
Hàm isinstance trả về
2 nếu được truyền trong đối tượng là một thể hiện hoặc một lớp con của được truyền trong lớp.Copied!
my_bytes = b'hello ' my_str = 'world' # 👇️ decode bytes object result = my_bytes.decode['utf-8'] + my_str print[result] # 👉️ "hello world"
Sự kết luận #
Python "TypeError: Không thể kết nối các byte" xảy ra khi chúng ta cố gắng kết hợp đối tượng byte và một chuỗi. Để giải quyết lỗi, giải mã đối tượng byte thành một chuỗi trước khi kết nối các chuỗi.
Đây là một sự chuyển đổi thô sang Python. Chuyện gì đang xảy ra ở đây?:
f = open[ 'myfile', 'a+' ]
f.write['test string' + '\n']
key = "pass:hello"
plaintext = subprocess.check_output[['openssl', 'aes-128-cbc', '-d', '-in', test, '-base64', '-pass', key]]
print [plaintext]
f.write [plaintext + '\n']
f.close[]
Tệp đầu ra trông giống như:
3Copied!
my_bytes = b'hello ' my_str = 'world' # 👇️ decode bytes object result = my_bytes.decode['utf-8'] + my_str print[result] # 👉️ "hello world"
Và sau đó tôi gặp lỗi này:
b'decryption successful\n'
Traceback [most recent call last]:
File ".../Project.py", line 36, in
f.write [plaintext + '\n']
TypeError: can't concat bytes to str