关于python:我应该为不存在的文件参数引发ValueError或OSError吗?

Should I raise ValueError or OSError for non-existent file arguments?

当程序接收到不存在或不是目录的文件名参数时,我想引发一个错误。但是什么错误被认为是最佳实践?

我知道ValueError经常被用来表示无效的论点(我已经看到了几个关于它的问题)。我还了解到,特别是在对python 3.3(pep 3151)中的异常进行了重组之后,对于与系统交互相关的问题,OSError是"捕获所有"类别。

所以,我有一个程序需要一个文件名参数。如果调用者提供的名称不存在,或者存在,但是是一个目录,我应该引发什么错误?这是一个错误的论点,因此似乎ValueError适用;但如果我试图将其作为文件读取,我将得到OSError,那么不应该为了一致性而返回它吗?


这真的很重要吗?(我假设您没有捕捉到这个异常,它纯粹是为查看终端输出的个人提供信息)操作系统不会看到这些异常,我只是

1
raise Exception("Invalid Arguments, expected a file that exists not %r"%(filename))

或者让它在尝试自然打开文件时失败,甚至