Argparse-AttributeError: объект ‘_StoreAction’ не имеет атрибута ‘parse_args’

#python #argparse

#python #argparse

Вопрос:

Я пытаюсь использовать argparse в первый раз. Я пытался написать код, но, к сожалению, я получаю сообщение об ошибке.

 import argparse
import pandas as pd
from data_util.data_loader import Data_load


def argparser():
    parser = argparse.ArgumentParser(description='Parameters')
    parser = parser.add_argument('--dataset_path', help='data_directory',metavar='Path',
                                 default='D:/content_search/data_util/data/ArticleDataset.json')
    args = parser.parse_args()
    return args


def main():
    args = argparser()
    data_frame = Data_load(args.dataset_path)
    print(data_frame)


if __name__ == '__main__':
    main()
 

Я получаю следующую ошибку:

 D:Content_searchScriptspython.exe D:/content_search/main.py
Traceback (most recent call last):
  File "D:/content_search/main.py", line 21, in <module>
    main()
  File "D:/content_search/main.py", line 15, in main
    args = argparser()
  File "D:/content_search/main.py", line 10, in argparser
    args = parser.parse_args()
AttributeError: '_StoreAction' object has no attribute 'parse_args'

Process finished with exit code 1
 

Пожалуйста, помогите мне понять, где я допустил ошибку. Заранее спасибо.

Комментарии:

1. Какова цель этого parser переназначения? parser = parser.add_argument(...) В документации нет ничего, что предлагало бы это сделать, не так ли?

2. Я не знаю, понял ли я вопрос. Я нашел это использование в документе. docs.python.org/3/howto/argparse.html Его вызывающий метод .add_argument .

Ответ №1:

Вы определяете синтаксический анализатор два раза в своей функции arparser (). Удалите parser = parser.add_argument и используйте только parser.add_argument, как показано ниже.

 import argparse
import pandas as pd
from data_util.data_loader import Data_load


def argparser():
    parser = argparse.ArgumentParser(description='Parameters')
    parser.add_argument('--dataset_path', help='data_directory',metavar='Path',
                                 default='D:/content_search/data_util/data/ArticleDataset.json')
    args = parser.parse_args()
    return args


def main():
    args = argparser()
    data_frame = Data_load(args.dataset_path)
    print(data_frame)


if __name__ == '__main__':
    main()
 

Комментарии:

1. Большое спасибо за помощь. Это была действительно глупая ошибка с моей стороны.

2. Проверьте эту ссылку для получения некоторых интересных подробностей об argparse: realpython.com/command-line-interfaces-python-argparse