Index: Lib/argparse.py =================================================================== --- Lib/argparse.py (revision 86743) +++ Lib/argparse.py (working copy) @@ -1125,10 +1125,14 @@ raise ValueError(msg) # all other arguments are used as file names - if self._bufsize: - return open(string, self._mode, self._bufsize) - else: - return open(string, self._mode) + try: + if self._bufsize: + return open(string, self._mode, self._bufsize) + else: + return open(string, self._mode) + except IOError: + err = _sys.exc_info()[1] + raise ValueError("IOError: %s" % err) def __repr__(self): args = [self._mode, self._bufsize] @@ -2228,9 +2232,10 @@ # TypeErrors or ValueErrors also indicate errors except (TypeError, ValueError): + err = _sys.exc_info()[1] name = getattr(action.type, '__name__', repr(action.type)) - msg = _('invalid %s value: %r') - raise ArgumentError(action, msg % (name, arg_string)) + msg = _('invalid %s value: %r details: "%s"') + raise ArgumentError(action, msg % (name, arg_string, err)) # return the converted value return result