在Python中的用户定义函数中,哪个是更好的实践:raise
、exception还是return None
?例如,我有一个在文件夹中查找最新文件的函数。
def latestpdf(folder):
# list the files and sort them
try:
latest = files[-1]
except IndexError:
# Folder is empty.
return None # One possibility
raise FileNotFoundError() # Alternative
else:
return somefunc(latest) # In my case, somefunc parses the filename
另一种选择是保留异常并在调用者代码中处理它,但我认为处理FileNotFoundError
比处理IndexError
更清楚。或者使用不同的名称重新引发异常是不好的形式吗?
发布于 2018-12-02 05:05:23
使用Python3.5的typing
返回None时的示例函数如下:
def latestpdf(folder: str) -> Union[str, None]
当引发异常时,将会是:
def latestpdf(folder: str) -> str
选项2看起来更具可读性和pythonic风格
(+如前所述向异常添加注释的选项。)
发布于 2009-08-21 19:34:15
一般来说,我会说,如果发生了一些无法恢复的灾难性事件,应该抛出一个异常(例如,你的函数处理一些无法连接的internet资源),如果你的函数真的应该返回一些东西,但没有合适的东西可以返回,你应该返回None。例如,如果您的函数尝试匹配字符串中的子字符串,则为"None“)。
https://stackoverflow.com/questions/1313812
复制相似问题