3

この質問にはすでに答えがあります。

実行を継続する方法はありますかtry例外が発生したらブロックする?私はその答えはノーだと思いますが、次のコードは醜いと思います。

def preprocess(self, text):
    try:
        text = self.parser(text)
    except AttributeError:
        pass
    try:
        terms = [term for term in text if term not in self.stopwords]
        text = list_to_string(terms)
    except AttributeError:
        pass
    try:
        terms = [self.stemmer.stem(term) for term in text]
        text = list_to_string(terms)
    except AttributeError:
        pass
    return text

これをpythonic形式で行う別の方法はありますか?


  • finallyキーワードを使用できますPythonのエラー - omri_saadon
  • はい、しかしもしそうなら、ネストされたコードがたくさんあります - Marco Canora
  • すべての文が一体となっていないのはなぜですかtryセクション ? - ᴀʀᴍᴀɴ
  • @omri_saadon:ええ、でも問題はあなたがどこにいるのかわからないということですtry停止したため、続行する場所。唯一の解決策は、すべてのステートメントをで囲むことです。try... - Willem Van Onsem
  • contextlibがあればfrom contextlib import suppress with suppress(AttributeError): - Jean-François Fabre

1 답변


2

私はこのように書き直すでしょう:

def preprocess(self, text):
    if hasattr(self, 'parser'): 
        text = self.parser(text)

    if hasattr(self, 'stopwords'): 
        terms = [term for term in text if term not in self.stopwords]
        text = list_to_string(terms)

    if hasattr(self, 'stemmer'):        
        terms = [self.stemmer.stem(term) for term in text]
        text = list_to_string(terms)

    return text

私はそれが理解するのがはるかに簡単で、捕まえないと思うAttributeError内部parserそしてstem呼び出し


  • はい、できれば例外を回避することをお勧めします。この重複した質問の枠の外側で考えると+1。 - Jean-François Fabre

リンクされた質問


関連する質問

最近の質問