ast.literal_eval()
を利用して集合を生成する際に現れたエラーの原因・対処法についてまとめます。
やろうとしたこと
空の集合を文字列から生成しようとした際、タイトルのエラーが発生しました。
import ast
ast.literal_eval("set()")
>ValueError: malformed node or string: <_ast.Call object at 0x7f80f4121f10>
ast
はpythonの標準ライブラリの一つです。このうちのメソッドの一つである ast.literal_eval()
は、文字列をリストや辞書に変換する際に利用できます。
結論
pythonのバージョンが3.8以下の場合、ast.literal_eval()
で空の集合を生成することができないようです。
どうしても空の集合を作成したい場合は、ast.literal_eval() を介さずに生成するか、もしくはリストを生成した後に集合に変更するなどの工夫が必要そうです。
a = set() #ast.literal_eval()を介さずに生成
a = set(ast.literal_eval("[]")) #空リストを生成後に集合へ変換
注意: 3.9以上は作成可能
pythonのバージョンが3.9以上の場合は、以下の書き方で空の集合を生成できるようです。
ast.literal_eval("set()") #3.9以上から対応
バージョン 3.9 で変更: Now supports creating empty sets with
公式ドキュメントより'set()'
.
まとめ
ast.literal_eval
で空の集合を生成しようとした際につまづいた点に関してメモしました。