我寫了一個嘗試,除了塊,我現在認識到是一個壞主意,因爲它不斷拋出難以調試的'盲'異常。問題是,我不知道如何去寫另一種方式,除了通過每個被調用的方法並手動讀取所有異常併爲每個方法創建一個案例。我怎樣才能解決這個嘗試除了塊?
你會如何構造這段代碼?
def get_wiktionary_audio(self):
'''function for adding audio path to a definition, this is meant to be run before trying to get a specific URL'''
#this path is where the audio will be saved, only added the kwarg for testing with a different path
path="study_audio/%s/words" % (self.word.language.name)
try:
wiktionary_url = "http://%s.wiktionary.org/wiki/FILE:en-us-%s.ogg" % (self.word.language.wiktionary_prefix, self.word.name)
wiktionary_page = urllib2.urlopen(wiktionary_url)
wiktionary_page = fromstring(wiktionary_page.read())
file_URL = wiktionary_page.xpath("//*[contains(concat(' ', @class, ' '), ' fullMedia ')]/a/@href")[0]
file_number = len(self.search_existing_audio())
relative_path = '%s/%s%s.ogg' % (path, self.word.name, file_number)
full_path = '%s/%s' % (settings.MEDIA_ROOT, relative_path)
os.popen("wget -q -O %s 'http:%s'" % (full_path, file_URL))
except:
return False
WordAudio.objects.create(word=self.word, audio=relative_path, source=wiktionary_url)
return True
*「手動讀取所有異常併爲每個異常做出判斷」* ...這就是您需要執行的操作。盲目捕捉異常並不是一個好主意。 – solarissmoke
@solarissmoke ...只捕獲你可以處理的異常。並非每個例外。有些需要通過..或者,除了塊將比try塊更長。使用異常來添加更多的代碼是Python編碼風格。 – Merlin
這裏的信息太少了。問題是,你想在什麼情況下返回False?代碼不好的原因是它會聚集太多東西,並返回False來解決所有可能的錯誤。要決定如何更好地編寫代碼,您需要更詳細地考慮代碼中可能發生的情況以及您想要做什麼。 – BrenBarn