outcome
Capture the outcome of Python function calls.
Decision gist · record as of 2026-08-14
Yes, if you need to treat function outcomes (success or failure) as first-class values in your code. It is lightweight, stable, well-licensed, and has no dependencies beyond attrs. The aging maintenance status is not a blocker—the package is mature and unlikely to need frequent updates—but verify that a result-type abstraction fits your design before adopting it.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Low install friction with a single lightweight dependency (attrs).
- Maintenance status is aging—last release was over 1000 days ago, though the repository remains active with a recent commit in February 2026.
License · maintenance · safety
MIT OR Apache-2.0 (permissive) — Dual-licensed under MIT or Apache License 2.0, both permissive; you may choose whichever suits your project.
last release 2023-10-26 (1023 days) · last repo commit 2026-02-02 · 36 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 52,958,339 downloads/mo, #556 on PyPI
Alternatives
Verify before relying
from outcome import capture
def my_func():
return "success"
result = capture(my_func)
print(result.unwrap())- Whether the aging maintenance status (1023 days since last release) indicates stable-and-done maturity or signals reduced responsiveness to issues.
- Specific use-case patterns where outcome's result-type abstraction provides measurable benefit over standard exception handling.
What it is and what it does
Outcome is a small library extracted from the Trio async framework that wraps the result of a function call—either its return value or any exception it raised—into a single Result object. Instead of letting exceptions propagate or requiring try-except blocks, you capture both success and failure as data that can be inspected, transformed, and handled uniformly. It is useful when you need to defer exception handling, combine results from multiple calls, or pass success and failure states through a pipeline.
The package is production-stable, supports Python 3.7 through 3.10 on CPython and PyPy, and depends only on attrs. It has no known security vulnerabilities and carries permissive licensing (MIT or Apache 2.0).
Use it for
- Collecting results from multiple function calls and processing successes and failures separately without early exception propagation.
- Building retry logic or error-recovery pipelines that need to inspect both outcomes before deciding what to do next.
- Writing test fixtures or mock handlers that need to return either a computed value or a captured exception for later inspection.
- Async frameworks and concurrent code where you want to capture task outcomes without blocking on exception handling.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you need to treat function outcomes (success or failure) as first-class values in your code.
It is lightweight, stable, well-licensed, and has no dependencies beyond attrs. The aging maintenance status is not a blocker—the package is mature and unlikely to need frequent updates—but verify that a result-type abstraction fits your design before adopting it.
Install
outcome on PyPI
Before you install
Low install friction with a single lightweight dependency (attrs). Maintenance status is aging—last release was over 1000 days ago, though the repository remains active with a recent commit in February 2026.
License in practice
Dual-licensed under MIT or Apache License 2.0, both permissive; you may choose whichever suits your project.
Quickstart
from outcome import capture
def my_func():
return "success"
result = capture(my_func)
print(result.unwrap())
Verify before relying
- Whether the aging maintenance status (1023 days since last release) indicates stable-and-done maturity or signals reduced responsiveness to issues.
- Specific use-case patterns where outcome's result-type abstraction provides measurable benefit over standard exception handling.
Package facts
| License | MIT OR Apache-2.0 permissive |
| Python support | Supports the current Python release >=3.7 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 1 packageattrs |
| Maintenance | Aging 1,023 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 52,958,339 / month, #556 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableFramework :: TrioIntended Audience :: DevelopersLicense :: OSI Approved :: Apache Software LicenseLicense :: OSI Approved :: MIT LicenseOperating System :: MacOS :: MacOS XOperating System :: Microsoft :: WindowsOperating System :: POSIX :: LinuxProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.7Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyTyping :: Typed |
Evidence: outcome-1.3.0.post0-py2.py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “capture function result or exception”
- outcomeCaptures the outcome of Python function calls—either a return value…
- func-timeoutRuns any Python function with a specified timeout limit, raising an…
- retryingRetrying is a decorator-based library that adds automatic retry logic…
Give your agent the search over MCP, or paste the wish link into any chat.
Similar packages
Captures exceptions raised in threads during pytest tests and re-raises them in the main thread so that multi-threaded test failures are properly detected.
However, the abandoned maintenance status (last commit 2023-02-06) is a concern—verify compatibility with your pytest and Python versions before relying on it for new…
Provides PEP 561 type stubs and typing utilities for Trio async framework, enabling static type checking with mypy for Trio, outcome, and async_generator packages.
However, maintenance is dormant (last release 2023-12-01), so verify that the type stubs remain accurate for your Trio version before relying on it for new projects.
Trio is an async I/O library that lets you write concurrent Python programs using async/await syntax, handling multiple network connections, file operations, and tasks simultaneously with a focus on correctness and ease of use.
Install it if you need to write concurrent I/O code and prefer structured concurrency principles and a simpler API over asyncio.
A flake8 plugin that detects async-related issues in code using Trio, AnyIO, or asyncio, flagging bugs, dead code, performance problems, and idiom violations.
A pytest plugin that enables testing of async code written with Trio, allowing you to write and run async test functions directly within pytest.
pytest-harvest captures and stores data generated during test execution, making it available for retrieval after the test session completes—useful for benchmarking, result aggregation, and post-test analysis.
See also sniffio · subprocess-tee · trio-websocket · colcon-test-result