gpt4 book ai didi

Python 错误检查标准实践

转载 作者:太空狗 更新时间:2023-10-29 17:15:08 25 4
gpt4 key购买 nike

我有一个关于 Python 错误检查的问题。假设我有一个将文件路径作为输入的函数:

def myFunction(filepath):
infile = open(filepath)
#etc etc...

一个可能的先决条件是该文件应该存在。

有几种可能的方法来检查这个先决条件,我只是想知道什么是最好的方法。

i) 用 if 语句检查:

if not os.path.exists(filepath):
raise IOException('File does not exist: %s' % filepath)

这是我通常采用的方式,尽管如果文件不存在,Python 也会抛出相同的 IOException,即使我没有抛出它也是如此。

ii) 使用断言检查前提条件:

assert os.path.exists(filepath), 'File does not exist: %s' % filepath

使用断言似乎是检查前置条件/​​后置条件的“标准”方式,因此我很想使用它们。但是,在执行期间使用 -o 标志时,这些断言可能会被关闭,这意味着此检查可能会被关闭,这似乎有风险。

iii) 完全不处理前置条件

这是因为如果文件路径不存在,无论如何都会产生异常,并且异常信息足够详细,用户可以知道文件不存在


我只是想知道上面哪一个是我应该用于我的代码的标准做法。

最佳答案

如果您只想引发异常,请使用选项 iii:

def myFunction(filepath):
with open(filepath) as infile:
pass

要以特殊方式处理异常,请使用 try...except block :

def myFunction(filepath):
try:
with open(filepath) as infile:
pass
except IOError:
# special handling code here

在任何情况下都最好先检查文件是否存在(选项 iii),因为在检查或断言发生和python 尝试打开该文件,该文件可能会被删除或更改(例如使用符号链接(symbolic link)),这可能会导致错误或安全漏洞。

此外,从 Python 2.6 开始,打开文件的最佳做法是使用 with open(...) 语法。这保证了文件将被关闭,即使在 with block 内发生异常也是如此。

在 Python 2.5 中,如果您在脚本前加上

,则可以使用 with 语法
from __future__ import with_statement

关于Python 错误检查标准实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843702/

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