之前一直写 go ,遇到错误就直接 return err 。现在写 python ,突然不知道怎么处理异常了。
比如封装一个函数,该函数内调用一个外部接口,接口的返回值不是我期望的内容,这个时候 raise 一个什么样的异常比较好?
另外请教下,在 Python 中,一般抛出异常有什么最佳实践吗?
1
killva4624 2022-11-01 10:08:46 +08:00 4
|
2
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 |
3
joApioVVx4M4X6Rf 2022-11-01 10:17:13 +08:00
接口的话,属于业务上的异常了,最好自己继承一个异常类,最外层 try: except 。
|
4
Trim21 2022-11-01 10:21:26 +08:00 via Android
处理方法一样啊,go 导出的一个 Err 变量对应 python 里面一个异常的类型。go 里面的 errors.Is/errors.As 到了 python 里面就是用 try except/isinstance
go 里面收到 err 直接 return err 其实就相当于 python 里面不写 try catch 。 |
5
guanzhangzhang 2022-11-05 11:51:44 +08:00
终于看到和我一样的老哥了,go 的 return err 给上层,然后上层可以打印日志,很多 golang 的项目一看报错基本知道问题范围。然后工作会写些 python ,py 这块的错误处理把我整不会了,还要 try case 每种 err 感觉好麻烦
|
6
guanzhangzhang 2022-11-05 14:49:21 +08:00
https://www.zlovezl.cn/articles/function-returning-tips/ 我刚看了下这个里的 3. 抛出异常,而不是返回结果与错误 似乎能解答你的疑问
|