0

我不知道为什么,但是 cislo 仍然是 10,当我在程序结束时打印它时,所以异常处理程序没有被执行,但我确信异常被引发了。

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)
4

2 回答 2

2

没有引发异常有两个原因:

--inputs参数不是必需的。

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

解析器接受--input缩写--inputs,因为没有歧义。

argparse 也不会引发 ArgumentError,它只会退出。您可以捕获 SystemExit 或子类 ArgumentParser 来覆盖此行为。

于 2013-04-15T13:47:03.467 回答
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
于 2013-04-15T14:07:42.940 回答