Skip to content

Improve copy_csv's error when the file does not exists. #33

@PimMeulensteen

Description

@PimMeulensteen
(lr_module_scratch-3.13) pimmeulensteen@pims-laptop ~/D/P/lr_module_scratch (main) [1]> time pdm run lir lrmodule/models/firing_pin_impression/validation.yaml
Traceback (most recent call last):
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/experiments/base_experiment.py", line 152, in run
    self._generate_and_run()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/experiments/predefined_experiment.py", line 55, in _generate_and_run
    split_data = list(splitter.apply(provider.get_instances()))
                                     ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/datasets/feature_data_csv.py", line 278, in get_instances
    with open(path) as f:
         ~~~~^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/data/firing_pin_impression2.csv'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/bin/lir", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/main.py", line 233, in main
    experiment.run()
    ~~~~~~~~~~~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/experiments/base_experiment.py", line 155, in run
    output.close()
    ~~~~~~~~~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/lrmodule/copy_csv.py", line 49, in close
    df = pd.read_csv(self.source_file)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py", line 1026, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py", line 620, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py", line 1620, in __init__
    self._engine = self._make_engine(f, self.engine)
                   ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py", line 1880, in _make_engine
    self.handles = get_handle(
                   ~~~~~~~~~~^
        f,
        ^^
    ...<6 lines>...
        storage_options=self.options.get("storage_options", None),
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/pandas/io/common.py", line 873, in get_handle
    handle = open(
        handle,
    ...<3 lines>...
        newline="",
    )
FileNotFoundError: [Errno 2] No such file or directory: '/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/data/firing_pin_impression2.csv'

This current state is quite verbose, but not very clear. Using something like:

if not self.source_file.is_file():
    raise FileNotFoundError(f"CopyCSV: File to copy '{self.source_file}' does not exist.")

would result in something like this

(lr_module_scratch-3.13) pimmeulensteen@pims-laptop ~/D/P/lr_module_scratch (main) [1]> time pdm run lir lrmodule/models/firing_pin_impression/validation.yaml
Traceback (most recent call last):
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/bin/lir", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/main.py", line 204, in main
    experiments, output_dir = initialize_experiments(confidence.loadf(args.setup))
                              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/main.py", line 104, in initialize_experiments
    return parse_experiments(cfg, output_dir), output_dir
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/experiment_strategies.py", line 343, in parse_experiments
    experiment = parse_experiment_strategy(
        exp_config,
        output_path,
    )
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/experiment_strategies.py", line 320, in parse_experiment_strategy
    return strategy_parser.parse(config, output_path)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/experiment_strategies.py", line 171, in parse
    exp = self.get_experiment(experiment_name)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/experiment_strategies.py", line 197, in get_experiment
    self.output_list(),
    ~~~~~~~~~~~~~~~~^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/experiment_strategies.py", line 69, in output_list
    return parse_aggregations(config, self._output_dir)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/aggregation.py", line 87, in parse_aggregations
    return [parse_aggregation(item, output_dir, context) for i, item in enumerate(config)]
            ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/aggregation.py", line 54, in parse_aggregation
    parsed_object = parser.parse(config, output_dir)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/.venv/lib/python3.13/site-packages/lir/config/base.py", line 368, in parse
    return func(config, output_dir)  # type: ignore
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/lrmodule/copy_csv.py", line 61, in copy_csv
    return CopyCSV(source_file, output_dir, columns=columns, new_file_name=new_file_name)
  File "/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/lrmodule/copy_csv.py", line 26, in __init__
    raise FileNotFoundError(f"CopyCSV: File to copy '{self.source_file}' does not exist.")
FileNotFoundError: CopyCSV: File to copy '/Users/pimmeulensteen/Documents/Projects/lr_module_scratch/data/firing_pin_impression2.csv' does not exist.

which is - in my opinion - more clear.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions