typeric: Python 中的实用类,如 Result 和 Option 等

128 天前
 stebest

项目地址

https://github.com/newdee/typeric

类别

Python

项目标题

Python 实用类,如 rust 风格的 Result 和 Option 等

项目描述

typeric 是一个面向 Python 的实用类型工具包,专注于清晰性、安全性和易用性。它最初是为了提升我个人的开发体验而构建的,但我也希望它能对他人有所帮助。

目前,typeric 提供了轻量且支持模式匹配的类型,比如 Result 和 Option —— 设计灵感来自 Rust 。未来还计划引入更多常见的类型模式和错误处理抽象。

亮点

示例代码

### `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")
2438 次点击
所在节点    分享创造
15 条回复
voyagerth1
128 天前
已经有一个类似的库了吧,叫 result
stebest
128 天前
@voyagerth1 那个貌似只有 result 吧,而且代码很老了,已经停止维护了
ispinfx
128 天前
屎上雕花~我说 Python ,不是说你的项目🤣
stebest
128 天前
@ispinfx python2 的时代确实是噩梦,现在好歹有了 type hint ,也有了 match 语法,也确实增加了一些可读性,知道这坨谁拉的,为什么拉,拉的咋样起码是好事,毕竟生态强大有时候确实离不开。说到屎上雕花,我觉得像这种 https://github.com/The-Pocket/PocketFlow 为了精简而精简,一百行代码 ruff 报了三百行 warning ,一瞬间仿佛回到了 python2 的年代,可读性和安全性极差,可能更像你说的 hh 。
3085570450tt
128 天前
@stebest #2 前阵子在 python 潮流周刊看的一个叫 safe-result 的 https://github.com/overflowy/safe-result
arielherself
128 天前
和这个有什么区别: https://pypi.org/project/option
arielherself
128 天前
这个是在 ddg 上搜索 “result and option for python” 出来的第一个结果
stebest
128 天前
@arielherself 你说的这个都没人维护了呀,最后一次三年前了,到现在 pyright 都不会让它过了。另外我这个只是自己觉得有用的就加进去,只是现在只加了这俩。
stebest
128 天前
@3085570450tt 这个感觉跟前面那个 Result 挺像的,也是刚写不久,不过 result 我倒是也有加,看来 rust 的枚举确实还是有人受用,不过 Result 坚持了那么久最后还是放弃了,我也只能说写点觉得实用的工具类放进去,后面遇到了也会放进去,说不定哪天官方版本自己有这些类似实现,或者更新不需要这些了,自然我这个也该废弃了。主打利己,如果对其他人有用那也更好。
yb2313
127 天前
我嘞个 rustPython 啊, 这种库也不好随便用, 蔓延性太广了, 一用到处就是了, 而且没有?来很不方便, 等火了我再用
stebest
127 天前
@yb2313 哈哈,就觉得他们的错误处理比较好,go 的返回方式也行,后面看看要不要也整一个。
yb2313
127 天前
@stebest #11 没有生态配合的话感觉还是不行, ai 补全也不会用这个形式来补全, 用起来就很麻烦了, 如果一定要这样写也仅限于严肃的项目, 那又还不如直接写 rust 了.
stebest
127 天前
@yb2313 还好,只是可以直接通过返回值来捕获错误也方便不少,毕竟做不到 rust 那么完善,但有些风格可以借鉴一下,先试着把哈哈,跟上面说的,到头来屎上雕花也可能。
stebest
127 天前
@yb2313 说到 rust 中的?,由于 python 中没有办法重载,加了一个 spread 来实现类似的功能了哈哈
JeremyFeng
126 天前
支持一下!最近也在学 Rust ,看到这种语法有点亲切哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1134142

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX