呼び出されたコマンドラインからDUTVIDを取得しようとする次のコードがあります。
_parser = argparse.ArgumentParser(description='A Test',
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
group.add_argument("--vid",
type=int,
help="vid of DUT")
options = parser.parse_args()
_
コマンドライン「pythontest.py--vid 0xabcd」について考えてみます。これは、基数16であるため、int('0xabcd')
の呼び出しを完了できないため、argparseが例外を発生させていることに気付きました。これを正しく処理しますか?
argparse
は、_'type'
_値から呼び出し可能な型変換を作成しようとしています。
_def _get_value(self, action, arg_string):
type_func = self._registry_get('type', action.type, action.type)
if not _callable(type_func):
msg = _('%r is not callable')
raise ArgumentError(action, msg % type_func)
# convert the value to the appropriate type
try:
result = type_func(arg_string)
# ArgumentTypeErrors indicate errors
except ArgumentTypeError:
name = getattr(action.type, '__name__', repr(action.type))
msg = str(_sys.exc_info()[1])
raise ArgumentError(action, msg)
# TypeErrors or ValueErrors also indicate errors
except (TypeError, ValueError):
name = getattr(action.type, '__name__', repr(action.type))
msg = _('invalid %s value: %r')
raise ArgumentError(action, msg % (name, arg_string))
# return the converted value
return result
_
デフォルトでは、int()
は基数10に設定されています。基数16および基数10のパラメーターに対応するために、自動基数検出を有効にできます。
_def auto_int(x):
return int(x, 0)
...
group.add_argument('--vid',
type=auto_int,
help='vid of DUT')
_
タイプが_'auto_int'
_に更新されていることに注意してください。
他の答えにコメントするのに十分な評判がありません。
auto_int
関数を定義したくない場合は、これがラムダで非常にきれいに機能することがわかりました。
group.add_argument('--vid',
type=lambda x: int(x,0),
help='vid of DUT')