3

이 질문에는 이미 답변이 있습니다.

실행을 계속할 수있는 방법이 있습니까?try예외가 발생하면 차단 하시겠습니까? 나는 aswer가 no라고 생각하지만, 다음 코드는 추악하다고 생각합니다.

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 키워드를 사용할 수 있습니다.파이썬 오류 - 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내부parserstem전화


  • 가능한 경우 예외를 피하는 것이 좋습니다. 이 중복 질문의 상자 밖에서 생각하기에 +1. - Jean-François Fabre

연결된 질문


관련된 질문

최근 질문