Python 自定义异常的疑问?

2022-11-01 09:57:12 +08:00
 yujianwjj

之前一直写 go ,遇到错误就直接 return err 。现在写 python ,突然不知道怎么处理异常了。

比如封装一个函数,该函数内调用一个外部接口,接口的返回值不是我期望的内容,这个时候 raise 一个什么样的异常比较好?

另外请教下,在 Python 中,一般抛出异常有什么最佳实践吗?

1945 次点击
所在节点    Python
6 条回复
killva4624
2022-11-01 10:08:46 +08:00
krixaar
2022-11-01 10:11:21 +08:00
个人习惯扔个 ValueError(f'什么破接口你看看传的啥破玩意:{result}') 出来,按照文档:
exception ValueError
当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如 IndexError 来描述时将被引发。
https://docs.python.org/zh-cn/3/library/exceptions.html#ValueError
0x0208v0
2022-11-01 10:17:13 +08:00
接口的话,属于业务上的异常了,最好自己继承一个异常类,最外层 try: except 。
Trim21
2022-11-01 10:21:26 +08:00
处理方法一样啊,go 导出的一个 Err 变量对应 python 里面一个异常的类型。go 里面的 errors.Is/errors.As 到了 python 里面就是用 try except/isinstance

go 里面收到 err 直接 return err 其实就相当于 python 里面不写 try catch 。
guanzhangzhang
2022-11-05 11:51:44 +08:00
终于看到和我一样的老哥了,go 的 return err 给上层,然后上层可以打印日志,很多 golang 的项目一看报错基本知道问题范围。然后工作会写些 python ,py 这块的错误处理把我整不会了,还要 try case 每种 err 感觉好麻烦
guanzhangzhang
2022-11-05 14:49:21 +08:00
https://www.zlovezl.cn/articles/function-returning-tips/ 我刚看了下这个里的 3. 抛出异常,而不是返回结果与错误 似乎能解答你的疑问

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

https://www.v2ex.com/t/891651

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

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

© 2021 V2EX