пытаетесь заменить open () на подмножество панд, но я получаю ошибку __exit__? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь работать с pylabels, чтобы создать ярлыки для предстоящего события. В одном разделе кода есть этот бит:

with open(os.path.join(base_path, "names.txt")) as names:
    sheet.add_labels(name.strip() for name in names)

, где sheet = labels.Sheet(specs, write_name, border=True). По сути, это загрузит каждую строку «names.txt» и вызовет функцию «write_name», используя спецификации в «specs», и добавит каждое имя к уникальным меткам. Я пытаюсь изменить этот код следующим образом:

with text_file[["Name"]] as names:
    sheet.add_labels(name.strip() for name in names)

Но я получаю эту ошибку:

Traceback (most recent call last):
  File "sticker.V.7.py", line 173, in <module>
    with text_file[["Name"]] as names:
AttributeError: __exit__

Может ли кто-нибудь помочь мне понять, что означает exit в этом контексте? Я не понимаю из других представлений.

Я надеюсь добавить этот аспект поднабора, чтобы я мог добавить дополнительные сведения в теги имен.

Я использую Python3.5

1 Ответ

0 голосов
/ 15 ноября 2018

Может ли кто-нибудь помочь мне понять, что означает __exit__ в этом контексте? Я не понимаю из других представлений. ... Поскольку text_file не является функцией, она должна быть завершена.

Когда вы используете with менеджеров контекста оператора , этот объект должен определить эти два метода:

  • __enter__
  • __exit__

Каким бы ни был text_file[["Name"]] (похоже, PFD DataFrame), он не реализует ни один из этих методов. Как указано в трассировке, он вообще не определяет __enter__, поэтому выполнение сразу останавливается и вызывает исключение.

Я не вижу необходимости использовать DataFrame в качестве менеджера контекста. Типичный вариант использования - это когда вы хотите убедиться, что что-то происходит в конце блока with, а именно, закрытие потока файлов. (Как и блок try / finally - вы хотите убедиться, что __exit__ вызывается безоговорочно.) С DataFrame Pandas я не уверен, есть ли какая-либо аналогия, которая потребовала бы использования этих двух более сложных методов.

...