Skip to content

Remaining bare except: / swallowed exceptions in tests/ and src/ (Codacy + hidden failures) #115

Description

@petercorke

Follow-up to #51 / #114, which fixed the bare except: pass pattern in tests/test_image_point_features.py. Inventory of what remains as of 2026-10-03 (main at 770a031). These are likely contributing to the Codacy B grade (Pylint/Pyflakes bare-except and try/except/pass/W0702/W0703-type findings, see #41) and, in tests, hide real failures.

Why it matters

In tests, a bare except: also swallows the AssertionError from assert*, so the test can never fail. Fixing the same pattern in #114 showed that several of those tests had been calling APIs that don't exist (Image.SURF, corners, getpixel, concat), so expect similar findings here: fix by running each snippet unprotected on OpenCV 4 and 5, rewriting against the real API with direct assertions, and mutation-checking that the test now fails when the code is broken (see #114's PR description for the method).

tests/

File bare except: except Exception + pass/continue
tests/test_camera.py 11 8
tests/base/test_base_color.py 3 1
tests/test_ros.py 0 3
tests/conftest.py 0 2 (probably legitimate GUI-suppression; review rather than blanket-remove)

src/

Location Issue Suggested fix
base/color.py:966 and :976 (rgb2xyz-style white/primaries lookup) bare except: around a dict lookup, then raise ValueError("unknown white value, must be one of" ", ".join(...)). Real bug: the two adjacent string literals concatenate first, so ", ".join(...) uses the whole sentence as the separator; the error message is garbled. except KeyError: and build the message with an f-string: f"unknown white value, must be one of {', '.join(_whites)}", plus a test that checks the message
base/findpeaks.py:119 bare except: around Polynomial.fit, then print + continue catch the specific exceptions Polynomial.fit raises for a neighbourhood falling off the data; use warnings.warn rather than print
base/imageio.py:1033 (set_window_title) bare except: pass except (AttributeError, RuntimeError): (backends without a window manager)
Camera.py, ImageProcessing.py, base/imageio.py one except Exception: pass/continue each review each: narrow the exception type or log

Suggested approach

Separate small PRs: (1) color.py message bug + test (src, real fix), (2) other src sites, (3) tests/test_camera.py, (4) tests/base/test_base_color.py and the rest. Add E722 (bare except) and BLE001/S110 (try-except-pass) to the ruff rule set once clean so it can't regress (see the typing/lint cluster, #40/#41).

Related: #41, #51, #113

Activity

  1. added
    tech-debtKnown technical debt / deferred cleanup, not a live bug
    on Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtKnown technical debt / deferred cleanup, not a live bug

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions