【问题标题】:Python: performing a function to check if the file has a suffixPython:执行一个函数来检查文件是否有后缀
【发布时间】:2012-12-21 14:45:20
【问题描述】:

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

  1. 在这种情况下,TypeError 是不是最好的 exception

  2. 有什么内置函数可以代替我的吗?

代码:

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

【问题讨论】:

  • 我希望一个名为 xxx_check 的函数返回一个布尔值而不是抛出异常。但是,我认为ValueError 更适合这种情况。
  • 我更喜欢我的东西检查函数来返回布尔值。类似def hasSuffix(inFile): return os.path.splitext(inFile)[1] is not None.
  • 假设你发现文件name(不是文件本身!这没有任何意义)有一个后缀(或没有); 现在是什么?为什么要关心其余代码?
  • 请注意,您的条件不正确。 splitext() 上的文档说,在未找到扩展名的情况下,2 元组中的第二个值将是一个空字符串,而不是 None,因此您的条件将始终评估 False
  • @KarlKnechtel 我想知道 - 还不如'.' in inFile

标签: python performance error-handling coding-style


【解决方案1】:

没有一个内置函数可以做到这一点,因为

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

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

【讨论】:

  • 不相信我喜欢为我退出的库函数。至少,而不是sys.exit,我宁愿它抛出一个SystemExit,如果我需要的话,我可以在高层做一些“更受控制”的事情。
  • @JonClements 没有指定这是一个库还是单个程序的一部分。 (此外,重点在于,这不一定首先属于函数。)
  • @Amber ,感谢您的帮助和提示。顺便说一句,我使用 ex sample.jpg 或 sample(不带后缀)函数总是返回 inFile 因为 os.path.splitext(inFile)[1] 是 ""
  • @Gianni 所以将is None 更改为== "" - 如果函数的行为是返回"",不知道为什么你坚持检查None
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2018-04-10
      相关资源
      最近更新 更多