В этом руководстве по Python мы обсудим, как исправить ошибку TypeError в Python 3. Требуется байтовый объект, а не ошибка ‘str’.
Модуль Python Pickle — это мощный инструмент для сериализации и десериализации объектов Python. Он позволяет преобразовывать сложные структуры данных, такие как списки, словари и даже пользовательские объекты, в поток байтов, который можно легко хранить или передавать.
Ошибка обычно возникает при попытке записи или чтения данных с использованием модуля Pickle в текстовом режиме(‘t’).
По умолчанию Pickle работает в двоичном режиме(«b»), что означает, что он ожидает и создает байтовые объекты. Когда вы пытаетесь передать строку вместо байтового объекта в двоичном режиме, Python выдает эту ошибку.
Пример 1
Предположим, у нас есть словарь Python, содержащий некоторые данные, которые мы хотим сериализовать с помощью Pickle:
import pickle employee_data = {'name': 'Alice', 'age': 30, 'city': 'New York'}
Теперь давайте попытаемся сериализовать этот словарь в файл с именем data.pkl, используя текстовый режим(«t») в Python:
with open('data.pkl', 'wb') as f: pickle.dump(employee_data, f)
Затем десериализовать его обратно в loading_data в Python:
with open('data.pkl', 'rt') as f: loaded_data = pickle.load(f) print(loaded_data)
Теперь в Python возникает ошибка «typeerror: требуется байтовый объект, а не ‘str’ Pickle».
Вот полный код для ошибки:
import pickle employee_data = {'name': 'Alice', 'age': 30, 'city': 'New York'} with open('data.pkl', 'wb') as f: pickle.dump(employee_data, f) with open('data.pkl', 'rt') as f: loaded_data = pickle.load(f) print(loaded_data)
Выход:
Traceback(most recent call last): File "C:\Users\kumar\PycharmProjects\pythonProject1\main.py", line 8, in loaded_data = pickle.load(f) TypeError: a bytes-like object is required, not 'str'
Результат можно увидеть на скриншоте ниже после выполнения кода в PyCharm.
Пример 2
Чтобы исправить ошибку «typeerror, требуется байтовый объект, а не ‘str’», нам нужно открыть файл в двоичном режиме(«b»), а не в текстовом режиме. Это говорит Python, что мы хотим работать с байтоподобными объектами, а не со строками. Вот исправленный код:
with open('data.pkl', 'wb') as f: pickle.dump(data, f)
Открывая файл в двоичном режиме(«wb»), мы гарантируем, что Pickle работает с байтоподобными объектами, предотвращая ошибку TypeError в Python.
Вот полный код, который не будет вызывать ошибку типа Pickle:
import pickle data = {'name': 'Alice', 'age': 30, 'city': 'New York'} with open('data.pkl', 'wb') as f: pickle.dump(data, f) with open('data.pkl', 'rb') as f: loaded_data = pickle.load(f) print(loaded_data)
Выход:
{'name': 'Alice', 'age': 30, 'city': 'New York'}
На снимке экрана ниже представлен результат после успешной реализации кода в редакторе Pycharm.
Заключение
Понимание и исправление ошибки типа Pickle в Python 3: требуется байтовый объект, а не ошибка ‘str’, имеет решающее значение для работы с сериализованными данными.
Мы можем избежать этой ошибки, открыв файлы в двоичном режиме(«be») и успешно сериализовав и десериализовав объекты Python с помощью Pickle.
Всегда дважды проверяйте режимы файлов и обрабатывайте данные соответствующим образом, чтобы предотвратить ошибки в ваших проектах Python.