New submission from Joel Nothman:

The argparse documentation states that "type= can take any callable that takes 
a single string argument and returns the converted value". The following is an 
exception:

    >>> import argparse
    >>> ap = argparse.ArgumentParser()
    >>> ap.add_argument('foo', type={}.get)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3/argparse.py", line 1294, in add_argument
        type_func = self._registry_get('type', action.type, action.type)
      File "/usr/lib/python3/argparse.py", line 1236, in _registry_get
        return self._registries[registry_name].get(value, default)
    TypeError: unhashable type: 'dict'

Sadly, a method bound to an unhashable type is unhashable! (Of course, is 
trivial to use partial or lambda to make any function hashable.)

The offending line in _registry_get is intended to look up named types (or 
actions), so it perhaps only relevant for string type= and action= values, 
which could be handled explicitly instead of using dict.get(x, x) to handle 
both cases. Alternatively, the TypeError could be caught and default returned.

----------
components: Library (Lib)
messages: 176040
nosy: bethard, jnothman
priority: normal
severity: normal
status: open
title: argparse types (and actions) must be hashable
type: behavior
versions: Python 2.7, Python 3.4

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

Reply via email to