2016-08-11 3 views
1

Я пытаюсь выяснить argparse для моей приключенческой игры. Это мой код:Python argparse к игре

parser = argparse.ArgumentParser(description='Adventure') 
parser.add_argument('--cheat','-c', action='store_true', help='cheat') 
parser.add_argument('--info','-i', action='store_true', help='Information') 
parser.add_argument('--version','-v', action='store_true', help='Version') 
parser.add_argument('--about', '-a', action='store_true', help='About') 

args = parser.parse_args() 

if args.cheat or args.c: 
    print("Cheat") 
    sys.exit() 
elif args.info or args.i: 
    print("Information") 
    sys.exit() 
elif args.version or args.v: 
    print("Version") 
    sys.exit() 
elif args.about or args.a: 
    print("About") 
    sys.exit() 
else: 
    #Game code# 

Но я получаю сообщение об ошибке, когда у меня есть все эти аргументы. Он отлично работал, когда я только обманул, но когда я добавил всех остальных, это испортилось. Или я действительно не знаю, что я делаю, или я не могу видеть, что случилось ...

Вот моя ошибка:

$ python3 adventure.py --info 
    Traceback (most recent call last): 
    File "adventure.py", line 12, in <module> 
    if args.cheat or args.c: 
     AttributeError: 'Namespace' object has no attribute 'c' 

Причина я его, как это происходит потому, что я хочу, чтобы напечатать в этом в терминале без запуска игры, поэтому, если вы просто наберете python3 adventure.py, игра начнется. Но я не могу это сделать сейчас: P. Только приключение python3 adventure.py -c и python3 --cheat.

Кто-нибудь знает об этом?

Спасибо.

ответ

2

Сообщения об ошибках довольно ясны: 'Namespace' object has no attribute 'c'.

argparse библиотека автоматически определяет имя атрибута для хранения значения опции in the following way командной строки:

For optional argument actions, the value of dest is normally inferred from the option strings. ArgumentParser generates the value of dest by taking the first long option string and stripping away the initial -- string. If no long option strings were supplied, dest will be derived from the first short option string by stripping the initial - character.

Поскольку у вас есть как длинные, так и короткие имена для вашего варианта, используется длинное имя. Другими словами, замените if args.cheat or args.c: на if args.cheat:.