Pythonの引数解析ライブラリのargparseでhelp引数に%を書くと、特定条件下でパーサーが正常終了しなくなりました。
例えば、次のコードはValueErrorを出して異常終了します。
import argparse parser = argparse.ArgumentParser(description='%%') parser.add_argument('a',type=str, help='%') parser.parse_args(["-h"])
: File ~/.pyenv/versions/3.8.10/lib/python3.8/argparse.py:621, in HelpFormatter._expand_help(self, action) 619 choices_str = ', '.join([str(c) for c in params['choices']]) 620 params['choices'] = choices_str --> 621 return self._get_help_string(action) % params ValueError: incomplete format
HelpFormatterクラスで%のエスケープが不完全なのが原因だと思われます。help以外の引数では、文字列に%が混じっていても問題はありませんでした。
回避方法
単純な回避方法としては、%を%%にすれば解決します。
一応githubのissueで既にマージの準備中(半年前だけど進んでいない)なので、今後更新されると%が二重に表示されるようになると思われます。
github.com
完璧な修正はCPython待ちです。