Синтаксическая ошибка Python del при использовании в качестве имени переменной

Я создаю интерфейс командной строки списка дел, и для удаления записи из списка требуется аргумент del. Использование CLI показано ниже.

$ ./todo help
Usage :-
$ ./todo add "todo item"  # Add a new todo
$ ./todo ls               # Show remaining todos
$ ./todo del NUMBER       # Delete a todo
$ ./todo done NUMBER      # Complete a todo
$ ./todo help             # Show usage
$ ./todo report           # Statistics

Но в python (я использую python 3.8.3) при использовании модуля argparse для анализа аргументов из командной строки код для указанной выше функции выглядит следующим образом.

parser.add_argument("--del", type=int, help="Delete a todo")

Проблема возникает из-за того, что del является зарезервированным ключевым словом python для совершенно другой цели, поэтому при чтении этой строки кода возникает синтаксическая ошибка.

print (args.del)

изображение выделения синтаксиса

Сообщение об ошибке выглядит следующим образом

File "todo.py", line 24
    if args.del:
            ^
SyntaxError: invalid syntax

изображение синтаксической ошибки

Есть ли решение использовать del в соответствии с требованиями проекта.


person Sarath Sajan    schedule 31.12.2020    source источник
comment
del — зарезервированное ключевое слово.   -  person juanpa.arrivillaga    schedule 31.12.2020
comment
почему бы не изменить del на delete, поскольку del является зарезервированным ключевым словом   -  person Vaebhav    schedule 31.12.2020
comment
да, я тоже это знаю, но модераторы проекта попросили использовать del в качестве аргумента CLI, каково возможное решение этой проблемы. Проверьте использование, описанное в теле вопроса.   -  person Sarath Sajan    schedule 31.12.2020
comment
Вот проблема с репозиторием GitHub, которую я сделал, если это как-то поможет. github.com/nseadlc-2020/package-todo-cli- задача/вопросы/51   -  person Sarath Sajan    schedule 31.12.2020
comment
Используйте dest=, чтобы изменить возможное имя аргумента на незарезервированное ключевое слово docs. python.org/3/library/argparse.html#dest   -  person Iain Shelvington    schedule 31.12.2020


Ответы (3)


Параметр dest можно передать в argparse.add_argument, чтобы изменить возможное имя атрибута, которое аргумент будет привязан к. Вы можете использовать это, чтобы изменить del на незарезервированное имя атрибута ключевого слова.

parser.add_argument('--del', type=int, help='Delete a todo', dest='should_delete')
person Iain Shelvington    schedule 31.12.2020

del — зарезервированное ключевое слово. Его нельзя использовать в качестве атрибута.

Однако в этом случае вы можете использовать строку для динамического доступа к этому атрибуту:

getattr(args, "del")

Однако, наверное, лучше изменить это имя.

person juanpa.arrivillaga    schedule 31.12.2020

Поскольку del является зарезервированным ключевым словом, его нельзя использовать. Однако вы можете использовать dest для создания пользовательского атрибута и не использовать автоматически сгенерированный атрибут.

parser = argparse.ArgumentParser()
parser.add_argument('--del', dest='delete')
parser.parse_args('--del XXX'.split())

Результат: Namespace(delete='XXX')

person rfkortekaas    schedule 31.12.2020