Skip to content

Fix AttributeError: 'ClientConnectorCertificateError' object has no attribute '_os_error'.#12136

Merged
Dreamsorcerer merged 3 commits intoaio-libs:masterfrom
themylogin:master
Feb 26, 2026
Merged

Fix AttributeError: 'ClientConnectorCertificateError' object has no attribute '_os_error'.#12136
Dreamsorcerer merged 3 commits intoaio-libs:masterfrom
themylogin:master

Conversation

@themylogin
Copy link
Contributor

What do these changes do?

ClientConnectorCertificateError is a subclass of ClientConnectorError and should have all of its attributes (Liskov substitution principle). However, when I try to access the os_error attribute in my exception handler, I get the following exception:

AttributeError: 'ClientConnectorCertificateError' object has no attribute '_os_error'.

Are there changes in behavior for the user?

Users that use hasattr(e, 'os_error') to ensure that e is not an instance of ClientConnectorCertificateError (or its subclasses), will have their code broken.

Is it a substantial burden for the maintainers to support this?

There should be none.

Checklist

  • I think the code is well written
  • Unit tests for the changes exist
  • Documentation reflects the changes
  • If you provide code modification, please add yourself to CONTRIBUTORS.txt
    • The format is <Name> <Surname>.
    • Please keep alphabetical order, the file is sorted by names.
  • Add a new news fragment into the CHANGES/ folder
    • name it <issue_or_pr_num>.<type>.rst (e.g. 588.bugfix.rst)

    • if you don't have an issue number, change it to the pull request
      number after creating the PR

      • .bugfix: A bug fix for something the maintainers deemed an
        improper undesired behavior that got corrected to match
        pre-agreed expectations.
      • .feature: A new behavior, public APIs. That sort of stuff.
      • .deprecation: A declaration of future API removals and breaking
        changes in behavior.
      • .breaking: When something public is removed in a breaking way.
        Could be deprecated in an earlier release.
      • .doc: Notable updates to the documentation structure or build
        process.
      • .packaging: Notes for downstreams about unobvious side effects
        and tooling. Changes in the test invocation considerations and
        runtime assumptions.
      • .contrib: Stuff that affects the contributor experience. e.g.
        Running tests, building the docs, setting up the development
        environment.
      • .misc: Changes that are hard to assign to any of the above
        categories.
    • Make sure to use full sentences with correct case and punctuation,
      for example:

      Fixed issue with non-ascii contents in doctest text files
      -- by :user:`contributor-gh-handle`.

      Use the past tense or the present tense a non-imperative mood,
      referring to what's changed compared to the last released version
      of this project.

@codspeed-hq
Copy link

codspeed-hq bot commented Feb 23, 2026

Merging this PR will not alter performance

✅ 59 untouched benchmarks


Comparing themylogin:master (481c13e) with master (830ae44)

Open in CodSpeed

@codecov
Copy link

codecov bot commented Feb 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.78%. Comparing base (4ec897b) to head (481c13e).
⚠️ Report is 5 commits behind head on master.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##           master   #12136   +/-   ##
=======================================
  Coverage   98.78%   98.78%           
=======================================
  Files         128      128           
  Lines       45297    45315   +18     
  Branches     2403     2405    +2     
=======================================
+ Hits        44747    44766   +19     
  Misses        390      390           
+ Partials      160      159    -1     
Flag Coverage Δ
CI-GHA 98.64% <100.00%> (+<0.01%) ⬆️
OS-Linux 98.38% <100.00%> (+<0.01%) ⬆️
OS-Windows 96.74% <100.00%> (+<0.01%) ⬆️
OS-macOS 97.63% <100.00%> (+<0.01%) ⬆️
Py-3.10.11 97.18% <100.00%> (-0.01%) ⬇️
Py-3.10.19 97.66% <100.00%> (+<0.01%) ⬆️
Py-3.11.14 97.86% <100.00%> (+<0.01%) ⬆️
Py-3.11.9 97.39% <100.00%> (+<0.01%) ⬆️
Py-3.12.10 97.48% <100.00%> (+<0.01%) ⬆️
Py-3.12.12 97.95% <100.00%> (+<0.01%) ⬆️
Py-3.13.11 ?
Py-3.13.12 98.21% <100.00%> (+0.74%) ⬆️
Py-3.14.2 ?
Py-3.14.3 98.16% <100.00%> (+0.74%) ⬆️
Py-3.14.3t 97.26% <100.00%> (+<0.01%) ⬆️
Py-pypy3.11.13-7.3.20 97.29% <100.00%> (+<0.01%) ⬆️
VM-macos 97.63% <100.00%> (+<0.01%) ⬆️
VM-ubuntu 98.38% <100.00%> (+<0.01%) ⬆️
VM-windows 96.74% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@Dreamsorcerer
Copy link
Member

I think this is an example of bugs getting introduced due to supporting non-ssl builds. I'm thinking it might be time to drop support for non-ssl builds soon.

@webknjaz
Copy link
Member

I think this is an example of bugs getting introduced due to supporting non-ssl builds. I'm thinking it might be time to drop support for non-ssl builds soon.

Fair. I think "missing openssl" as a thing is coming from the late Python 2 epoch. OTOH, nowadays this might be a property of less common runtimes (pyodide etc).

…ttribute '_os_error'.

ClientConnectorCertificateError is a subclass of ClientConnectorError and should have all of its
attributes (LSP). However, when I try to access the os_error attribute, I get the mentioned exception.
@Dreamsorcerer Dreamsorcerer added backport-3.13 Trigger automatic backporting to the 3.13 release branch by Patchback robot backport-3.14 Trigger automatic backporting to the 3.14 release branch by Patchback robot labels Feb 26, 2026
@Dreamsorcerer Dreamsorcerer merged commit c0f1513 into aio-libs:master Feb 26, 2026
43 of 44 checks passed
@patchback
Copy link
Contributor

patchback bot commented Feb 26, 2026

Backport to 3.13: 💚 backport PR created

✅ Backport PR branch: patchback/backports/3.13/c0f1513c37cb145b2618aeffd8f58d2f0cf230ab/pr-12136

Backported as #12147

🤖 @patchback
I'm built with octomachinery and
my source is open — https://github.com/sanitizers/patchback-github-app.

@patchback
Copy link
Contributor

patchback bot commented Feb 26, 2026

Backport to 3.14: 💚 backport PR created

✅ Backport PR branch: patchback/backports/3.14/c0f1513c37cb145b2618aeffd8f58d2f0cf230ab/pr-12136

Backported as #12148

🤖 @patchback
I'm built with octomachinery and
my source is open — https://github.com/sanitizers/patchback-github-app.

patchback bot pushed a commit that referenced this pull request Feb 26, 2026
Dreamsorcerer pushed a commit that referenced this pull request Feb 27, 2026
…torCertificateError' object has no attribute '_os_error'. (#12148)

**This is a backport of PR #12136 as merged into master
(c0f1513).**

Co-authored-by: themylogin <themylogin@gmail.com>
Dreamsorcerer pushed a commit that referenced this pull request Feb 27, 2026
…torCertificateError' object has no attribute '_os_error'. (#12147)

**This is a backport of PR #12136 as merged into master
(c0f1513).**

Co-authored-by: themylogin <themylogin@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-3.13 Trigger automatic backporting to the 3.13 release branch by Patchback robot backport-3.14 Trigger automatic backporting to the 3.14 release branch by Patchback robot bot:chronographer:provided There is a change note present in this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants