shinonome
V2EX  ›  Python

函数的返回建议是 list|[] 还是 list|None 呢

By shinonome at 2024 年 7 月 26 日 · 6781 次点击

最近开了类型检查,红了一片, 很多都是 None connot be assign

所以请问一下大家遇到返回是空的情况, 是统一的返回 list 还是 list | None 呢

21 条回复  •  2024-09-01 11:50:34 +08:00
zeyexe
   1
zeyexe  
   2024 年 7 月 26 日
如果返回值的 None 等效空 list ,建议只返回空 list
thinkershare
   2
thinkershare  
   2024 年 7 月 26 日
看情况,因为有时候返回空 list 属于正常状况,返回 None 是异常了,当然更好的方式我还是异常时直接 raise,统一返回 list 消费放好处理一点。
Azure99
   3
Azure99  
   2024 年 7 月 26 日
你认为字符串""和 None 语义一样么?很显然是不一样的,""是一个空字符串,而 None 不表示任何数据。
所以 2 楼就是优解,如果它是空的,那么返回空 list ,如果有异常,直接抛出异常。不要返回 None 。
Dyon
   4
Dyon  
   2024 年 7 月 26 日   ❤️ 1
不考虑上下文一般选择[],保持类型稳定
zictos
   5
zictos  
   2024 年 7 月 27 日
1 、看实际情况吧,有时候根据需求可以知道有异常也能返回空 list ,因为事先对于重要性是能有一个初步判断的,所以都返回 list 保持一致性也挺好的。不然有异常时也可以返回 None ,数据为空的时候正常返回空 list 。

3 、还要看实际对于函数的使用,比如你在调用函数后需要将返回值当做 list 进行操作(列表拼接、切片等),那都返回 list 比较好。

3 、如果对于函数的调用仅仅用于判断是否非空,那用 None 就行,实际使用时用类似 if func():这样的方式判断就行。一般函数执行结束后未执行 return 语句或者 return 后面没有任何值,都是默认返回 None 的,所以甚至都不需要专门显式返回 None 。
oyps
   6
oyps  
   2024 年 7 月 27 日
我的话,函数返回 None 一般都是异常的结果,直接就 throw 错误,让调用者自己 try catch 去。
lucasj
   7
lucasj  
   2024 年 7 月 27 日
问一下,怎么开类型检查啊?
oyps
   8
oyps  
   2024 年 7 月 27 日
@lucasj 要看具体的编辑器,有些是用某些插件实现的
llsquaer
   9
llsquaer  
   2024 年 7 月 27 日
我觉得函数目的是返回列表就返回列表,虽然 python 中 None 和空列表是同义,但是保不齐你以后还有需要操作列表的情况,比如往里面加数据之类的操作。

当然遇到错误数据该 raise 的还是 raise 。如果忽略错误想继续还是返回列表。
dearmymy
   10
dearmymy  
   2024 年 7 月 27 日
python 思想就是 一路都是执行成功,有问题交给异常 。 再说空 list 跟 string 也可以用 if not 判断
netabare
   11
netabare  
   2024 年 7 月 27 日 via iPhone
能不返回 None 就不要返回 None
Zy143L
   12
Zy143L  
   2024 年 7 月 27 日 via Android
统一返回 list
调用这个函数返回值判断直接用 if 就行
他空[]就是 false
ho121
   13
ho121  
   2024 年 7 月 27 日 via Android
提示 None connot be assign 一般是因为没有处理异常,如果返回 None 代表异常的话。
例如元素未找到返回 None:
if xxx is None: print("元素未找到“); return:
这样后面再以引用 xxx 就不会提升 None connot be assign 。
Sawyerhou
   14
Sawyerhou  
   2024 年 7 月 27 日 via Android
可以返回空 list 就返回空 list ,保持返回类型一致。

不能返回空 list 就用 None 。
shinonome
   15
shinonome  
OP
   2024 年 7 月 27 日
感谢大家, 看来偷懒还是要还帐的
luckyc
   16
luckyc  
   2024 年 7 月 27 日
@zeyexe 你在说什么?????
None 是没有值, []是空
能一样啊??????
wzdsfl
   17
wzdsfl  
   2024 年 7 月 27 日
@l4ever 不懂你在急什么,人家说的是假设条件,看都不看就来急了
HashV2
   18
HashV2  
   2024 年 7 月 27 日
还是要看 none 和空 list 在实际业务中的所代表的含义有没有差异
julyclyde
   19
julyclyde  
   2024 年 7 月 29 日
cannot be assign 不是左值错误吗??
zsh2517
   20
zsh2517  
   2024 年 7 月 29 日
@zeyexe
@l4ever

#1 的意思,我觉得是在说,如果在业务场景下,需要表示『这里应当是一个数组/列表,且目前数组里面,没有元素』,这个场景下,建议返回 [] 而不是 None 。

如果 None, [] 有不同的语义,那么还是要看实际情况
jack2020
   21
jack2020  
   2024 年 9 月 1 日
返回 list ,return None 的地方一般是边界条件吧,可以使用 raise 异常
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 55ms · 3.9.8.5