Преобразовать & lt; Class 'str' & gt; в объект списка в Python3 при чтении строкового класса в объект списка [дубликат]

Тип raw - это отсутствие параметра типа при использовании родового типа.

Необработанный тип не должен использоваться, потому что это может привести к ошибкам во время выполнения, например, вставить double в то, что должно было быть Set из int s.

Set set = new HashSet();
set.add(3.45); //ok

При извлечении материала из Set вы надеваете Не знаю, что выйдет. Предположим, что вы ожидаете, что это все int s, вы отбрасываете его на Integer; исключение во время выполнения, когда приходит double 3.45.

С параметром типа , добавленным к вашему Set, вы сразу же получите ошибку компиляции. Эта превентивная ошибка позволяет устранить проблему, прежде чем что-то взорвется во время работы (таким образом, сэкономив время и усилия).

Set<Integer> set = new HashSet<Integer>();
set.add(3.45); //NOT ok.
7
задан Benjamin 8 January 2014 в 14:45
поделиться

3 ответа

Как насчет использования eval?

EDIT См. ответ @ Ignacio с помощью ast.literal_eval.

>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])")
>>> c
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])

Я бы рекомендовал сделать это, если вы на 100% уверены в содержимом файла.

>>> def myFunc(myString, myList1, myList2):
...     print myString, myList1, myList2
... 
>>> myFunc(*eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]

См. ответ @ Игнасио ... намного, гораздо безопаснее.

Применение использования ast даст:

>>> import ast
>>> def myFunc(myString, myList1, myList2):
...     print myString, myList1, myList2
... 
>>> myFunc(*ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]
13
ответ дан sberry 21 August 2018 в 08:33
поделиться

Вы ищете ast.literal_eval() .

>>> ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])")
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
20
ответ дан Ignacio Vazquez-Abrams 21 August 2018 в 08:33
поделиться
  • 1
    Будет +1 в час, когда я смогу снова проголосовать :) – sberry 28 January 2011 в 21:40
  • 2
    Возможно, я должен был упомянуть, что я запускаю Python 2.3, это для более поздней версии? Я не могу найти модуль ast. – Das.Rot 28 January 2011 в 21:47
  • 3
    @ Das.Rot: К сожалению, это так. – Ignacio Vazquez-Abrams 28 January 2011 в 21:53
  • 4
    @ Das.Rot: Похоже, это 2.6+. Если вы уверены в содержании, то eval будет работать. – sberry 28 January 2011 в 21:55
  • 5
    хорошо, спасибо! Похоже, что eval сделает трюк! – Das.Rot 28 January 2011 в 22:03

Возможно, вы захотите также просмотреть модуль pickle для сохранения объектов python в текстовые файлы, а затем прочитать их обратно.

1
ответ дан user 21 August 2018 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: