# Bug report When `ArgumentParser` encounters certain errors, it calls `self.error(...)` which exits, even when `exit_on_error` is set to False. This prevents catching the exception and writing a custom error message. ```python import argparse parser = argparse.ArgumentParser(exit_on_error=False) parser.add_argument('filename') try: args = parser.parse_args([]) except Exception: print("Bad argument, here's what you should do instead...") ``` Test on Python 3.11.3: ```console python argparse-bug/repro.py usage: repro.py [-h] filename repro.py: error: the following arguments are required: filename ``` <!-- gh-linked-prs --> ### Linked PRs * gh-103519 <!-- /gh-linked-prs -->