New submission from Pedro:

ArgumentParser._get_value() has two exception handlers: one for 
ArgumentTypeError, and one for (TypeError, ValueError). But in the latter case, 
any custom message I include the TypeError or ValueError is ignored and 
replaced with a generic "invalid value" message.

I don't see why the module wouldn't first check for a custom message in a 
TypeError or ValueError exception, as it does for ArgumentTypeError, and only 
use the generic message if a custom one is not specified. The current behavior 
does not let you to give the user a detailed reason for the exception unless 
you raise ArgumentTypeError, which is considered an implementation detail as 
mentioned in #20039, and also doesn't feel right for errors that are not 
related to the argument's type.


Code to reproduce:

import argparse

def nonnegative_not_suppressed(arg):
  try:
    x = int(arg)
    if x >= 0:
      return x
    else:
      raise argparse.ArgumentTypeError('Enter a nonnegative integer')
  except:
    raise argparse.ArgumentTypeError('Enter a nonnegative integer')

def nonnegative_suppressed(arg):
  try:
    x = int(arg)
    if x >= 0:
      return x
    else:
      raise ValueError('Enter a nonnegative integer')
  except:
    raise ValueError('Enter a nonnegative integer')

p = argparse.ArgumentParser('parser')
p.add_argument('--no-suppress', type=nonnegative_not_suppressed)
p.add_argument('--suppress', type=nonnegative_suppressed)
p.parse_args(['--no-suppress', '-4']) # Displays "Enter a nonnegative integer"
p.parse_args(['--suppress', '-4']) # Displays "invalid nonnegative_suppressed 
value: '-4'"

----------
components: Extension Modules
messages: 292669
nosy: pgacv2
priority: normal
severity: normal
status: open
title: Why are the custom messages for ValueError and TypeError suppressed in 
argparse?
type: enhancement
versions: Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30220>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to