Python异常处理程序是';不执行

Python异常处理程序是';不执行,python,argparse,Python,Argparse,我不知道为什么,但当我在程序末尾打印它时,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(DK

我不知道为什么,但当我在程序末尾打印它时,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)

由于以下两个原因,未引发异常:

--inputs
参数不是必需的

 parser.add_argument("--inputs", help='vstupni soubor', default=sys.stdin, required=True)
解析器接受缩写为
--input
--input
,因为没有歧义

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


    • 由于两个原因,未引发异常:

      --inputs
      参数不是必需的

       parser.add_argument("--inputs", help='vstupni soubor', default=sys.stdin, required=True)
      
      解析器接受缩写为
      --input
      --input
      ,因为没有歧义

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


      那就扩展课程吧

      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
      

      那就扩大课程范围吧

      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
      

      如果在exception块中放置打印,是否会显示?您是如何确认引发异常的?“但我确信引发了异常。”-为什么?这不会引发异常;argparse允许您将
      --inputs
      缩写为
      --input
      我已执行了您的代码,但未引发异常,我已将打印“引发异常”并从未打印跟踪。如果将打印放在except块中,它会显示吗?您是如何确认引发异常的?“但我确定引发了异常。”-为什么?这不会引发异常;argparse允许您将
      --inputs
      缩写为
      --input
      我已执行了您的代码,但未引发异常,我已打印了“引发异常”“而且跟踪从未打印。嗯,所以我不能自己返回退出代码或做一些反应?真正有用的解析器:)嗯,所以我不能自己返回退出代码或者做一些反应?真正有用的解析器:)thx,但实际上这个缩写(输入对输入等)仍然存在问题,这是意外的,所以我将用myselfthx解析它,但实际上这个缩写(输入对输入等)仍然存在问题,这是意外的,所以我将自己解析它