FileNotFoundError thrown due to file name in file, rather than file itself

Loris Bennett loris.bennett at fu-berlin.de
Tue Nov 12 03:52:31 EST 2024


Cameron Simpson <cs at cskk.id.au> writes:

> On 11Nov2024 18:24, dieter.maurer at online.de <dieter.maurer at online.de> wrote:
>>Loris Bennett wrote at 2024-11-11 15:05 +0100:
>>>I have the following in my program:
>>>    try:
>>>        logging.config.fileConfig(args.config_file)
>>>        config = configparser.ConfigParser()
>>>        config.read(args.config_file)
>>>        if args.verbose:
>>>            print(f"Configuration file: {args.config_file}")
>>>    except FileNotFoundError:
>>>        print(f"Error: configuration file {args.config_file} not found.  Exiting.")
>>
>>Do not replace full error information (including a traceback)
>>with your own reduced error message.
>>If you omit your "try ... except FileNotFoundError`
>>(or start the `except` clause with a `raise`), you
>>will learn where in the code the exception has been raised
>>and likely as well what was not found (Python is quite good
>>with such error details).
>
> Actually, file-not-found is pretty well defined - the except action
> itself is fine in that regard.
>
> [...]
>>>2. In terms of generating a helpful error message, how should one
>>>   distinguish between the config file not existing and the log file not
>>>   existing?
>
> Generally you should put a try/except around the smallest possible
> piece of code. So:
>
>     config = configparser.ConfigParser()
>     try:
>         config.read(args.config_file)
>     except FileNotFoundError as e:
>         print(f"Error: configuration file {args.config_file} not found: {e}")
>
> This way you know that the config file was missing.

I appreciate the point you make about the smallest possible piece of
code, although I can imagine that this could potentially create a lot of
try/except clutter and I might just want a single block and then try to
catch various exceptions.

Regarding your example above, if 'missingfile.py' contains the following

  import configparser

  config = configparser.ConfigParser()

  try:
      config.read('/foo/bar')
  except FileNotFoundError as e:
      print(f"Error: configuration file {config_file} not found: {e}")

them

  python3 missingfile.py

does not produce an any output for me and so does not seem to be a
reliable way of handling the case where the config file does not exist.

Cheers,

Loris

-- 
This signature is currently under constuction.


More information about the Python-list mailing list