gpt4 book ai didi

python - 如果没有返回值,则不要调用函数

转载 作者:行者123 更新时间:2023-12-04 13:11:33 24 4
gpt4 key购买 nike

假设您有一个可以返回某个对象或 None 的函数:

def foobar(arg):
if arg == 'foo':
return None
else:
return 'bar'

现在你调用这个方法并且你想对对象做一些事情,在这个例子中我得到一个 str ,所以我可能想调用 upper()功能。
现在有两种情况可能发生,第二种情况会失败,因为 None 没有方法 upper()
foobar('sdfsdgf').upper()
foobar('foo').upper()

当然,这现在很容易解决:
tmp = foobar('foo')
if tmp is not None:
tmp.upper()
# or
try:
foobar('foo').upper()
except ArgumentError:
pass
# or
caller = lambda x: x.upper() if type(x) is str else None
caller(foobar('foo'))

但是异常处理可能不够具体,我可能会捕获到一个可能很重要的异常(= 调试变得更难),而第一种方法很好,但会导致代码更大,而第三种选项看起来很不错,但您必须对所有可能的功能都这样做,所以方法一可能是最好的。

我想知道是否有任何语法糖可以很好地处理这个问题?

最佳答案

您可以使用:

(foobar('foo') or '').upper()

括号内的表达式返回一个字符串,即使 foobar()返回一个假值。

这确实导致 None被空字符串替换。如果您的代码依赖于 None留在原地,您最好的选择仍然是使用单独的 if调用声明 .upper()仅当返回值不是 None .

关于python - 如果没有返回值,则不要调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21329495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com