デバッグするのが難しい「ブラインド」例外を投げつけ続けるので、私が今気づいているtry exceptブロックを書いたのは悪い考えでした。問題は、呼び出されるメソッドのそれぞれを通過し、すべての例外を手動で読み込み、それぞれのケースを作成する以外に、別の方法で記述する方法を知りません。ブロックを除いてこのtry tryを回避する方法はありますか?
このコードをどのように構造化しますか?
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 ...処理できる例外のみをキャッチします。すべての例外ではありません。いくつかは渡される必要があります。または、exceptブロックはtryブロックよりも長くなります。コードを追加するために例外を使用してPythonのコーディングスタイルです。 – Merlin
ここにはあまり情報がありません。問題は、どのような状況でFalseを返したいのですか?コードが悪い理由は、あまりにも多くのものを一括して扱い、すべての可能なエラーに対してFalseを返すことです。それをより良く書く方法を決定するには、そのコードで何が起こる可能性があり、何をしたいのかをより詳細に考える必要があります。 – BrenBarn