Skip to main content

A highly opinionated flake8 plugin for Trio-related problems.

Project description


A highly opinionated flake8 plugin for Trio-related problems.

This can include anything from outright bugs, to pointless/dead code, to likely performance issues, to minor points of idiom that might signal a misunderstanding.

It may well be too noisy for anyone with different opinions, that's OK.

Pairs well with flake8-async and flake8-bugbear.


pip install flake8-trio

List of warnings

  • TRIO100: a with trio.fail_after(...): or with trio.move_on_after(...): context does not contain any await statements. This makes it pointless, as the timeout can only be triggered by a checkpoint.
  • TRIO101 yield inside a nursery or cancel scope is only safe when implementing a context manager - otherwise, it breaks exception handling.
  • TRIO102 it's unsafe to await inside finally: unless you use a shielded cancel scope with a timeout"
  • TRIO105 Calling a trio async function without immediately awaiting it.


CalVer, YY.month.patch


  • Added TRIO105 check for not immediately awaiting async trio functions.
  • Added TRIO106 check that trio is imported in a form that the plugin can easily parse.


  • Added TRIO102 check for unsafe checkpoints inside finally: blocks


  • Avoid TRIO100 false-alarms on cancel scopes containing async for or async with.


  • Initial release with TRIO100 and TRIO101

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flake8-trio-22.7.4.tar.gz (11.3 kB view hashes)

Uploaded source

Built Distribution

flake8_trio-22.7.4-py3-none-any.whl (6.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page