Chris Jerdonek added the comment:

[From python-dev: 
http://mail.python.org/pipermail/python-dev/2012-September/121683.html ]

> I've tried the various suggestions out, and I think from a practical point of
view, a fix for the regression in the 2.7, 3.2 and 3.3 branches should be to
apply the one line check for action being a _StoreAction instance.  This seems
to be the easiest way to preserve the current behavior (the fix for issues
#12776 and #11839) and fix issue #15906.  I'll update the issue and apply this 
change to the three branches.

This change doesn't seem right to me.  It also seems like it may cause other 
regressions.

The argparse documentation makes it pretty clear that 'type' is meant to be 
applied only to strings.

Also, the parse_args() documentation says, "Convert argument strings to objects 
and assign them as attributes of the namespace," but it doesn't say anything 
about also converting non-string defaults.

Thirdly, the documentation for the "default" keyword argument says, "The 
default keyword argument of add_argument(), whose value defaults to None, 
specifies what value should be used if the command-line argument is not 
present."  It doesn't say that the value should be converted before being used.

Also, here is what the change does from a behavior perspective for a couple 
test cases (compared to some other points in time):

parser = ArgumentParser()
parser.add_argument("--test", dest="test", action='store', type=str, 
default=False)
args = parser.parse_args()
print(repr(args.test))

to_str = lambda s: s.lower()

parser = ArgumentParser()
parser.add_argument("--test", dest="test", action='store', type=to_str, 
default=False)
args = parser.parse_args()
print(repr(args.test))

2.7.3: 
False
False

Python 3.3 (815b88454e3e; before issue 12776 patch):
False
False

Python 3.3.0rc2+:
'False'
Traceback (most recent call last):
  ...
AttributeError: 'bool' object has no attribute 'lower'

Python 3.3.0rc2+15906-1.diff:
'False'
Traceback (most recent call last):
  ...
AttributeError: 'bool' object has no attribute 'lower'

So with the change, code that previously didn't raise an error will now raise 
an AttributeError.  In other words, it seems like the change imposes 
restrictions on what default values are allowed relative to the 'type' callable 
where such restrictions didn't exist before.

----------

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

Reply via email to