Как написать собственный парсер для аргументов - PullRequest
0 голосов
/ 02 июня 2018

Я нахожусь в ситуации, когда я сталкиваюсь со строкой типа "(d, a, b = 2, c = 3)", и мне нужно разобрать ее на * args и ** kwargs.

Я попытался использовать модуль ast, но он не может преобразовать операторы Assign в пары ключ-значение.eval также выдает аналогичную ошибку, и я также хотел бы избежать eval.

Обратите внимание, я бы хотел избежать разделения на ,, потому что вход может иметь форму:

"(d, [b,c], e=3, f=[5,6])"

Вот что я пытаюсь:

>>import ast
>>input_args = "(d, a, b=2, c=3)" 
>>ast_tree = ast.parse(input_args)

Я получаю:

 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/lib/python2.7/ast.py", line 37, in parse
     return compile(source, filename, mode, PyCF_ONLY_AST)
 File "<unknown>", line 1
     (d, a, b=2, c=3)
             ^
SyntaxError: invalid syntax

Может кто-нибудь предоставить и подсказать, как это сделать или какой модульможет помочь сделать это аккуратно?

1 Ответ

0 голосов
/ 02 июня 2018

Просто поместите имя фиктивной функции на передней панели:

input_args = "dummy(d, a, b=2, c=3)"
ast_tree = ast.parse(input_args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...