GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix: allow None for exc_tb in Traveller.__exit__ type annotations by madhavcodez · Pull Request #974 · python-pendulum/pendulum

Conversation

@madhavcodez

@madhavcodez madhavcodez commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

When a with block exits without an exception, CPython calls __exit__(None, None, None), so all three parameters must accept None. On the travellers, exc_type and exc_val were already optional, but exc_tb was typed as TracebackType without | None. A type checker correctly infers that the traveller is not a valid context manager, which produces the invalid-context-manager error on with pendulum.travel_to(...) reported in #973.

What changed

Annotate exc_tb as TracebackType | None in BaseTraveller.__exit__ and the time_machine-backed Traveller.__exit__ (the remaining Traveller subclasses inherit from BaseTraveller).

Closes #973. The underlying false-positive trigger is also tracked upstream at astral-sh/ty#3832.

Verification

Reproduced the invalid-context-manager diagnostic before the change and confirmed it clears afterward (reverting the annotation brings it back). ruff and mypy --strict stay clean. This is annotation-only with no runtime or behavior change, so no tests were added. Happy to add a CHANGELOG entry once this PR has a number if you would like one.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@madhavcodez
fix: allow None for exc_tb in Traveller.__exit__ annotations
eda43e4
CPython calls __exit__(None, None, None) when a with block exits without an
exception, so all three parameters must accept None. exc_type and exc_val were
already optional on the travellers, but exc_tb was annotated TracebackType
without | None, so a type checker infers the traveller is not a valid context
manager and reports invalid-context-manager on with pendulum.travel_to(...).

Annotate exc_tb as TracebackType | None in BaseTraveller.__exit__ and the
time_machine-backed Traveller.__exit__ (the other Traveller subclasses inherit
from BaseTraveller).

Closes python-pendulum#973
ashb
ashb approved these changes Jun 29, 2026
View reviewed changes
@codspeed

codspeed Bot commented Jun 29, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 1 untouched benchmark


Comparing madhavcodez:fix/traveller-exit-type-973 (eda43e4) with master (b99bd14)

Open in CodSpeed
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ashb
ashb merged commit 1d9e31a into python-pendulum:master Jun 29, 2026
18 checks passed

Uh oh!

There was an error while loading. Please reload this page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@ashb ashb ashb approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Type checker thinks pendulum.travel_to() does not implement Traveller.__exit__

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@madhavcodez @ashb
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.