синтаксический анализатор python read_file () AttributeError: у объекта 'NoneType' нет атрибута 'infile' - PullRequest
0 голосов
/ 17 сентября 2018
%%writefile testcipher.py
import argparse
def parse_command_line():
    parser=argparse.ArgumentParser()
    parser.add_argument("infile",type=argparse.FileType('r'),help="show this help message and exit")
    args=parser.parse_args()

def read_file(file_path):
    with open(file_path,"r") as f:
        message=f.read()
    return message
args = parse_command_line()
read_file(args.infile)

----------

%%bash

python3 testcipher.py plain_message.txt


----------

Traceback (most recent call last):
  File "testcipher.py", line 13, in <module>
    read_file(args.infile)
AttributeError: 'NoneType' object has no attribute 'infile'

Я пытался прочитать файл с аргументом парсера, как-то не получилось .. помогите пожалуйста ..

игнорировать для требования к слову игнорировать для требования к слову игнорировать для требования к слову

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

(1) Вам необходимо вернуть 'args' в вашей функции parse_command_line ().

(2) Ваша функция add_argment приводит к открытию файла напрямую, используя ваш аргумент в качестве имени файла.

%%writefile testcipher.py

import argparse
def parse_command_line():
    parser=argparse.ArgumentParser()
    parser.add_argument("infile",type=str,help="show this help message and exit")
    args=parser.parse_args()
    return args

def read_file(file_name):
    __file = open(file_name)
    message=__file.read()
    return message

args = parse_command_line()
message = read_file(args.infile)
print (message)

----------

%%bash

python3 testcipher.py plain_message.txt


----------
0 голосов
/ 17 сентября 2018

parse_command_line должен возвращать объект args. На самом деле ваша функция синтаксического анализа возвращает None.

И, конечно, никто не имеет никаких атрибутов, какими бы ни были его имена.

...