0

我有一个脚本,它创建一个临时文本文件并在用户关闭窗口后删除。

问题在于,可能会或可能不会创建临时文本文件,具体取决于用户所做的事情。或者有时可能会在用户退出之前删除临时文本文件。有三种可能的情况。

  1. 临时文本文件以“tempfilename”的名称创建。
  2. 临时文本文件以“tempfilename”的名称创建,但在用户退出之前被删除。因此,当尝试删除它引发的文件时OSError
  3. 没有创建临时文本文件,也没有创建名为“tempfilename”的变量,因此它会引发NameError

我试过使用这段代码:

try:
    os.remove(str(tempfilename))
except OSError or NameError:
    pass

但似乎它只抓到了OSError唯一的。我做错什么了吗?

4

2 回答 2

3
try:
    os.remove(str(tempfilename))
except (OSError, NameError):
    pass
于 2013-07-13T15:32:55.520 回答
0
tempfilename = None

# ...

if tempfilename is not None and os.path.exists(tempfilename):
    os.remove(tempfilename)

这不好捕捉NameError,因为它会隐藏代码中的其他拼写错误(例如,os.remov(…))。

此外,OSError并不总是意味着该文件不存在。在 Windows 上,如果文件正在使用中,则会引发异常 ( http://docs.python.org/2/library/os.html#os.remove )。在这种情况下,您会希望看到异常,以便您可以了解问题和/或以其他方式处理它。

异常处理程序应尽可能窄以避免隐藏无关的错误或错误

于 2013-07-13T15:56:47.827 回答