https://github.com/newdee/typeric
Python
Python 实用类,如 rust 风格的 Result 和 Option 等
typeric 是一个面向 Python 的实用类型工具包,专注于清晰性、安全性和易用性。它最初是为了提升我个人的开发体验而构建的,但我也希望它能对他人有所帮助。
目前,typeric 提供了轻量且支持模式匹配的类型,比如 Result 和 Option —— 设计灵感来自 Rust 。未来还计划引入更多常见的类型模式和错误处理抽象。
Result
类型:Ok(value)
和 Err(error)
Option
类型:Some(value)
和 NONE
__match_args__
).map()
/ .map_err()
/ .unwrap()
/ .unwrap_or()
等辅助方法Result[T, E]
和 Option[T]
### `Result`
from typeric.result import Result, Ok, Err
def parse_number(text: str) -> Result[int, str]:
try:
return Ok(int(text))
except ValueError:
return Err("Not a number")
match parse_number("42"):
case Ok(value):
print("Parsed:", value)
case Err(error):
print("Failed:", error)
### `Option`
from typeric.option import Option, Some, NONE
def maybe_get(index: int, items: list[str]) -> Option[str]:
if 0 <= index < len(items):
return Some(items[index])
return NONE
match maybe_get(1, ["a", "b", "c"]):
case Some(value):
print("Got:", value)
case NONE:
print("Nothing found")
1
voyagerth1 102 天前
已经有一个类似的库了吧,叫 result
|
![]() |
2
stebest OP @voyagerth1 那个貌似只有 result 吧,而且代码很老了,已经停止维护了
|
3
ispinfx 102 天前
屎上雕花~我说 Python ,不是说你的项目🤣
|
![]() |
4
stebest OP @ispinfx python2 的时代确实是噩梦,现在好歹有了 type hint ,也有了 match 语法,也确实增加了一些可读性,知道这坨谁拉的,为什么拉,拉的咋样起码是好事,毕竟生态强大有时候确实离不开。说到屎上雕花,我觉得像这种 https://github.com/The-Pocket/PocketFlow 为了精简而精简,一百行代码 ruff 报了三百行 warning ,一瞬间仿佛回到了 python2 的年代,可读性和安全性极差,可能更像你说的 hh 。
|
5
3085570450tt 101 天前
@stebest #2 前阵子在 python 潮流周刊看的一个叫 safe-result 的 https://github.com/overflowy/safe-result 的
|
6
arielherself 101 天前
和这个有什么区别: https://pypi.org/project/option
|
7
arielherself 101 天前
这个是在 ddg 上搜索 “result and option for python” 出来的第一个结果
|
![]() |
8
stebest OP @arielherself 你说的这个都没人维护了呀,最后一次三年前了,到现在 pyright 都不会让它过了。另外我这个只是自己觉得有用的就加进去,只是现在只加了这俩。
|
![]() |
9
stebest OP @3085570450tt 这个感觉跟前面那个 Result 挺像的,也是刚写不久,不过 result 我倒是也有加,看来 rust 的枚举确实还是有人受用,不过 Result 坚持了那么久最后还是放弃了,我也只能说写点觉得实用的工具类放进去,后面遇到了也会放进去,说不定哪天官方版本自己有这些类似实现,或者更新不需要这些了,自然我这个也该废弃了。主打利己,如果对其他人有用那也更好。
|
![]() |
10
yb2313 101 天前
我嘞个 rustPython 啊, 这种库也不好随便用, 蔓延性太广了, 一用到处就是了, 而且没有?来很不方便, 等火了我再用
|
![]() |
12
yb2313 101 天前
@stebest #11 没有生态配合的话感觉还是不行, ai 补全也不会用这个形式来补全, 用起来就很麻烦了, 如果一定要这样写也仅限于严肃的项目, 那又还不如直接写 rust 了.
|
![]() |
13
stebest OP @yb2313 还好,只是可以直接通过返回值来捕获错误也方便不少,毕竟做不到 rust 那么完善,但有些风格可以借鉴一下,先试着把哈哈,跟上面说的,到头来屎上雕花也可能。
|
![]() |
15
JeremyFeng 100 天前 ![]() 支持一下!最近也在学 Rust ,看到这种语法有点亲切哈哈
|