防守编程或浪费时间?

时间:2013-03-06 21:09:55

标签: python

这个问题的一般要点:如果甚至有可能出现问题的可能性很小,我应该抓住可能的错误吗?具体做法是:

我有一个应用程序,可以读取和写入程序的先前历史记录到.txt文件。在初始化时,程序读取历史文件以确定它应该和不应该执行的操作。如果尚未存在历史文件,则会创建一个。像这样:

global trackList
try:
    # Open history of downloaded MP3s and transfer it to trackList
    with open('trackData.txt', 'r') as f: 
        trackrackList = f.readlines()
except Exception, e: #if file does not exist, create a blank new one
    with open('trackData.txt', 'w') as f:
        f.write("")

程序然后根据它们是否在txt文件中继续下载MP3。下载MP3后,会将其添加到txt文件中。像这样:

mp3File = requests.get(linkURL)
with open('trackData.txt', 'a') as f:
    f.write(linkURL + '\n')

现在,几乎100%肯定txt文件将在第一个函数中创建时保留。我们正在处理下载一些MP3 - 程序将永远不会运行超过几分钟。但是,远程可能是用户删除了历史txt文件,或者在下载MP3时损坏了该文件,在这种情况下,由于没有错误处理,程序将崩溃。

如果一个好的程序员在try ... except块中创建了历史txt文件,如果它不存在,或者只是不必要的偏执和浪费的空间,那么它是否会将最后一段代码包装好?实现它是微不足道的,但请记住,我有这样的程序,用户可以在很短的时间内删除/破坏以前创建的txt文件。我平常的Python代码将变成嵌套的try ... except雷区。

2 个答案:

答案 0 :(得分:5)

更安全的解决方案是打开文件并在您下载时保持打开状态。然后用户将无法删除它。下载并记录所有内容后,关闭该文件。这也将带来更好的性能。

答案 1 :(得分:5)

为什么要在应用程序启动时创建一个空文件?如果启动时文件不存在,则不执行任何操作 - open('trackData.txt', 'a')仍会创建新文件。