防守编程或浪费时间?

use*_*661 2 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("")
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Kna*_*ģis 5

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


phi*_*hag 5

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