1

我写了这个函数来使用另一个函数,检查输出是否有正确的后缀。在我使用它之前,我有两个问题:

  1. 在这种情况下使用是TypeError最好的例外吗?

  2. 有没有我可以使用的内置函数来代替我的?

代码:

def suffix_NameCheck(inFile):
    if os.path.splitext(inFile)[1] is None:
        raise TypeError('"%s" has not a suffix' % inFile)
    else:
        return inFile
4

3 回答 3

7

没有内置函数可以执行此操作,因为

  1. 并非所有文件系统都真正使用扩展名。
  2. 单独使用 if 语句可能更常见,而不是将其放入函数中。

原因是您可能必须在某个地方捕获该异常(除非您故意希望它结束​​程序,在这种情况下,可能有比抛出异常更好的方法,例如sys.exit)。捕获异常的代码至少与仅执行if检查和处理它的代码一样复杂。

于 2012-12-21T14:48:37.893 回答
5

我不会从名为 的函数中引发异常suffix_NameCheck,而是返回TrueFalse代替。的正常操作suffix_NameCheck不受值是否有正确的后缀的影响,它的工作是检查该后缀。

使用 的函数suffix_NameCheck仍然可能引发异常;ValueError在这种情况下使用可能是一个更好的例外。

于 2012-12-21T14:49:54.630 回答
2

我认为这是更恰当的一个ValueError。您尝试报告的问题是用户提供了文件路径/名称参数作为没有文件扩展名的字符串。这是字符串值的问题,而不是任何类型的问题。

其他回答者的观点是,乍一看,这种功能确实应该返回 a bool,但鉴于该用例仅包含bool(os.path.splitext(candidate)[1]),我认为如果您真的想在这里提出异常,那么您已经在使用 a返回 a 的较低级别函数bool

于 2012-12-21T14:48:42.993 回答