2012-12-21 34 views
1

我编写了这个函数来使用其他函数,检查输出是否有正确的后缀。以前我用它,我有两个问题:Python:执行一个函数来检查文件是否有后缀

  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 
+2

我期望从名为'xxx_check'的函数返回一个布尔值而不是引发异常。然而,我认为''ValueError'更适合这种情况。 – khachik

+1

我更喜欢我的事件检查函数来返回布尔值。像'def hasSuffix(inFile):return os.path.splitext(inFile)[1]不是None'。 – Kevin

+0

假设你发现文件**名称**(不是文件本身!没有任何意义)有后缀(或不是); *怎么办*?为什么代码的其余部分关心? –

回答

7

没有内置的函数,这样做,是因为

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

原因是,你可能需要在某处捕获异常(除非你故意要它结束程序,在这种情况下,可能有比抛出异常更好的方法,例如sys.exit)。捕捉异常的代码至少与代码一样,只需执行if检查自己并处理它。

+0

不相信我喜欢库函数为我退出。至少,我宁愿它抛出'SystemExit',而不是'sys.exit',我可以在需要的时候做一些“更加控制”的事情。 –

+0

@JonClements没有指定这是一个库还是个别程序的一部分。 (此外,重点在于,这不一定属于功能。) – Amber

+0

@Amber,感谢您的帮助和提示。顺便说一下,我使用前sample.jpg或示例(没有后缀)函数返回总是inFile,因为os.path.splitext(inFile)[1]是“” –

2

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

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

5

我不会从名为suffix_NameCheck的函数引发异常,而是返回TrueFalsesuffix_NameCheck的正常操作不受影响或没有正确的后缀值,它的作业是检查该后缀。

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

相关问题