diff --git a/docs/ChangeLog.rst b/docs/ChangeLog.rst
index 787e4bb..faa9109 100644
--- a/docs/ChangeLog.rst
+++ b/docs/ChangeLog.rst
@@ -5,6 +5,16 @@ Release Notes
 Version 1.0 (in development)
 ============================
 
+Bug fixes
+---------
+
+* **Breaking Change:** :class:`~mechanicalsoup.LinkNotFoundError` now derives
+  from ``Exception`` instead of ``BaseException``. While this will bring the
+  behavior in line with most people's expectations, it may affect the behavior
+  of your code if you were heavily relying on this implementation detail in
+  your exception handling.
+  [`#203 <https://github.com/MechanicalSoup/MechanicalSoup/issues/203>`__]
+
 Version 0.10
 ============
 
diff --git a/mechanicalsoup/utils.py b/mechanicalsoup/utils.py
index 740b35e..9ad7ff0 100644
--- a/mechanicalsoup/utils.py
+++ b/mechanicalsoup/utils.py
@@ -1,4 +1,4 @@
-class LinkNotFoundError(BaseException):
+class LinkNotFoundError(Exception):
     """Exception raised when mechanicalsoup fails to find something.
 
     This happens in situations like (non-exhaustive list):

LinkNotFoundError should not inherit from BaseException
Hello,

I have code that performs many tests, reporting which tests failed. We therefore implement a try-catch such as

```python
try:
    run_test()
except Exception:
    msg = traceback.format_exc() 
    report_failure()
```

LinkNotFoundError is not caught by this because it inherits from BaseException.

Inheriting from BaseException is not recommended in the docs: https://docs.python.org/3/library/exceptions.html

I'd like too see this change, or if there is a reason for it I'm curious to hear it.
diff --git a/tests/test_utils.py b/tests/test_utils.py
new file mode 100644
index 0000000..2400fcb
--- /dev/null
+++ b/tests/test_utils.py
@@ -0,0 +1,9 @@
+import mechanicalsoup
+import pytest
+
+
+def test_LinkNotFoundError():
+    with pytest.raises(mechanicalsoup.LinkNotFoundError):
+        raise mechanicalsoup.utils.LinkNotFoundError
+    with pytest.raises(Exception):
+        raise mechanicalsoup.utils.LinkNotFoundError

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-flake8 pytest-httpbin pytest-mock
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
beautifulsoup4==4.12.3
brotlicffi==1.0.9.2
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
click==8.0.4
coverage==6.2
dataclasses==0.8
decorator==5.1.1
flake8==5.0.4
flasgger==0.9.7.1
Flask==2.0.3
gevent==22.10.2
greenlet==2.0.2
httpbin==0.10.0
idna==3.10
importlib-metadata==4.2.0
iniconfig==1.1.1
itsdangerous==2.0.1
Jinja2==3.0.3
jsonschema==3.2.0
lxml==5.3.1
MarkupSafe==2.0.1
mccabe==0.7.0
-e git+https://github.com/MechanicalSoup/MechanicalSoup.git@7d9ee675f465b0e6596b5fcb9f9c9cb7ce8ded74#egg=MechanicalSoup
mistune==2.0.5
packaging==21.3
pluggy==1.0.0
py==1.11.0
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
pyparsing==3.1.4
pyrsistent==0.18.0
pytest==7.0.1
pytest-cov==4.0.0
pytest-flake8==1.1.1
pytest-httpbin==1.0.2
pytest-mock==3.6.1
PyYAML==6.0.1
requests==2.27.1
six==1.17.0
soupsieve==2.3.2.post1
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
Werkzeug==2.0.3
zipp==3.6.0
zope.event==4.6
zope.interface==5.5.2

name: MechanicalSoup
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - beautifulsoup4==4.12.3
      - brotlicffi==1.0.9.2
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - click==8.0.4
      - coverage==6.2
      - dataclasses==0.8
      - decorator==5.1.1
      - flake8==5.0.4
      - flasgger==0.9.7.1
      - flask==2.0.3
      - gevent==22.10.2
      - greenlet==2.0.2
      - httpbin==0.10.0
      - idna==3.10
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - itsdangerous==2.0.1
      - jinja2==3.0.3
      - jsonschema==3.2.0
      - lxml==5.3.1
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - mistune==2.0.5
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pyrsistent==0.18.0
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-flake8==1.1.1
      - pytest-httpbin==1.0.2
      - pytest-mock==3.6.1
      - pyyaml==6.0.1
      - requests==2.27.1
      - six==1.17.0
      - soupsieve==2.3.2.post1
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - werkzeug==2.0.3
      - zipp==3.6.0
      - zope-event==4.6
      - zope-interface==5.5.2
prefix: /opt/conda/envs/MechanicalSoup

tests/test_utils.py::test_LinkNotFoundError
tests/test_utils.py::flake-8::FLAKE8
docs/ChangeLog.rst mechanicalsoup/utils.py
docs/ChangeLog.rst mechanicalsoup/utils.py