我对 Python 也不是很熟悉,不过我还是认为 Python 的错误处理更好些。
1. Go 的这种显式的把 Err 当成返回值的设计选择会让代码变的啰嗦一些。对于题主的例子来说,Python 生态可以根据不同的场景选择每一次处理都抛异常或者把异常合并在一起,让 Happy Path 更加清楚。
如
```
try:
result = foo()
do_something(result) // 这里也可以每次都 try ,和 Go 就一样了。
except FooError as e:
```
2. 我认为题主的这句话「很多时候,我跳转到函数的源码里面,也看不出会返回什么异常」是因为对语言熟悉程度导致的。我常写 Go 就知道常见的 io.EOF, os.ErrNotExist 。但从实际文档来看可能差异不大,以 JSON 为例,Python Doc 把 Exception 都放一起来相对来说还好找些。
https://docs.python.org/3/library/json.html#exceptions https://pkg.go.dev/encoding/json#MarshalerError