TypeError: open() получил неожиданный аргумент ключевого слова 'buffering'

Я пишу программу чата с python, и когда я запускаю свой код, я получаю следующую ошибку.

Traceback (most recent call last):
  File "C:/Users/stephen/AppData/Local/Programs/Python/Python35/chatbot.py", line 97, in <module>
    with bz2.open("C:/RC_{}".format(timeframe.split('-')[0],timeframe), buffering=1000) as f:
TypeError: open() got an unexpected keyword argument 'buffering'

Не удалось найти в Интернете никакой информации об ошибке. Все, что я видел, было, возможно, что это была ошибка, и я должен сообщить об этом в python. В настоящее время работает python3.5.3. Это та часть кода, которая получает ошибку.

with bz2.open("C:/RC_{}".format(timeframe.split('-')[0],timeframe), buffering=1000) as f:
    for row in f:
        row_counter += 1
        parent_id = row['parent_id']
        body = format_data(row['body'])
        created_utc = row['created_utc']
        score = row['score']
        comment_id = row['name']
        subreddit = row['subreddit']
        parent_data = find_parent(parent_id)

2 ответа

Ошибка очень явная:

TypeError: open() got an unexpected keyword argument 'buffering'

Простая проверка документации для bz2.open затем покажет вам, что эта функция не принимает buffering аргумент.

Так что просто удали это.

bz2.open функция не занимает buffering аргумент. Четное bz2.BZ2File, который занимает buffering, явно отмечает:

buffering аргумент игнорируется. Его использование не рекомендуется.

Аргументы буферизации немного бессмысленны для компрессоров; они должны до некоторой степени буферизовать, так как, если вы запрашиваете объем данных X, им может понадобиться распаковать блок неизвестного конечного размера, чтобы получить его, поэтому они либо распаковывают весь блок и буферизируют несжатые данные за пределами X запрашивать или останавливать декомпрессию, когда они достигают X, буферизируя сжатые данные (и им, возможно, все еще придется буферизовать некоторые несжатые данные, поскольку декомпрессия одного байта из потока может привести к выводу многих байтов).

Дело в том, что нет разумного способа отключить или ограничить буферизацию; потребности компрессора означают, что у вас нет такого уровня контроля.

Другие вопросы по тегам