2013-04-15 4 views
0

Я не знаю почему, но cislo все еще 10, когда я печатаю его в конце программы, поэтому обработчик исключений не выполняется, но я уверен, что исключение было поднято.Python - обработчик исключений не выполнен

import argparse 
import locale 
import sys 

locale.setlocale(locale.LC_ALL, 'cs_CZ.UTF-8') 

cislo = 10 

parser = argparse.ArgumentParser(prog='dka', description="Determinizace konecneho automatu(DKA)") 
parser.add_argument("--inputs", help='vstupni soubor', default=sys.stdin) 

try: 
    parser.parse_args(['--input', 'agas', '--input', 'agag']) 
except argparse.ArgumentError: 
    cislo = 20 

print(cislo) 
+0

Если поставить печать внутри вашего кроме блока, это отображение? – thegrinner

+0

Как вы подтвердили, что возникло исключение? – Danish

+1

«но я уверен, что исключение было поднято». - Зачем? – khachik

ответ

2

Исключение не поднимается по двум причинам:

--inputs аргумент не требуется.

parser.add_argument("--inputs", help='vstupni soubor', default=sys.stdin, required=True) 

анализатор принимает --input, как сокращенно --inputs, потому что нет никакой двусмысленности.

Также argparse не будет поднимать ArgumentError, он просто выйдет. Вы можете поймать SystemExit или подкласс ArgumentParser, чтобы переопределить это поведение.

+0

hm, поэтому я не могу вернуть код выхода самостоятельно или сделать некоторую реакцию? Действительно полезный парсер :) – Krab

1

Просто расширить класс тогда.

class myparse(argparse.ArgumentParser): 
    def exit(self,status,message): 
     print("You are bad: ", status, message) 
     exit(5) 

cislo = 10 

parser = myparse(prog='dka', description="Determinizace konecnehoautomatu(DKA)") 

Дает:

usage: dka [-h] [--inputs INPUTS] 
You are bad: 2 dka: error: unrecognized arguments: --inputss agas 
+0

thx, но на самом деле все еще проблема с этим сокращением (входные и входные данные и т. Д.), Что неожиданно, поэтому я сам проанализирую его – Krab

Смежные вопросы