这个问题的一般要点:如果甚至有可能发生错误的远程可能性,我是否应该抓住可能的错误?具体来说:防御性编程还是浪费时间?
我有一个应用程序读取和写入程序的以前的历史记录到.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 - 该程序永远不会运行超过几分钟。但是,在下载MP3时,用户可能会删除历史文件或以其他方式损坏文件,在这种情况下程序将因为没有错误处理而崩溃。
如果一个好的程序员将最后一块代码包装在一个try ... except
块中,那么它会创建历史文件txt
如果文件不存在,或者只是不必要的偏执狂和浪费的空间?这是微不足道的实现,但请记住,我有这样的程序,在那里有几百个机会让用户在一小段时间内删除/破坏以前创建的txt文件。我通常平坦的Python代码会变成嵌套的try ... except
雷区。
您只想捕捉*特定的*例外。在这种情况下,catch'OSError',* not *'Exception' .. – 2013-03-06 21:13:16