286

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

나는 try ... 예외를 내 코드에 넣고 예외가 발생했을 때. 나는이 코드를 계속 사용하기를 원합니다. 왜냐하면 모든 것이 여전히 잘 돌아갈 수 있기 때문입니다. 문제는 except 블록을 비워 두거나 #do를 사용하지 않으면 구문 오류가 발생합니다. 루프가 아니기 때문에 계속 사용할 수 없습니다. 거기에 계속 사용할 코드를 알려주는 키워드가 있습니까?

4 답변


445

except:
    pass


  • Exception을 제외하고 : # 다른 예외를 삼키지 않는 # pass! - Roger Pate
  • @Aaron - 동의합니다. 그러나 이것이 좋은 / 나쁜 아이디어 였는지는 질문이 아닙니다. - David
  • 이렇게하면 SystemExit, KeyboardInterrupt 및 다른 기능을 포착 할 수 있습니다. - FogleBird
  • KeyboardInterrupt를 잡지 않습니다. 예 :while True: try: f = 열린 (& filedesnotexist.txt & # 39;)`except: passKeyboardInterrupt가 중지되고 코드가 종료됩니다. - Chthonic Project
  • @ Chthonic 프로젝트 베어exceptKeyboardInterrupt를 포함하여 모든 예외를 잡아낼 수 있습니다.try. 귀하의 예제에서 거기에 KeyboardInterrupt 전에 발생할 수 있습니다try또는 내부except어디에서 잡히지 않는지 다음과 같은 예제를 실행하면while True: try: pass except: passKeyboardInterrupt가 약 50 %의 시간 만 잡히게됩니다. 만약 너라면time.sleep(1)내부try거의 매번 잡히게됩니다. - Jack O'Connor

224

일반적인 대답

파이썬에서 표준 "nop"은pass성명서:

try:
    do_something()
except Exception:
    pass

사용except Exception맨손으로 대신except같은 잡기 피하기SystemExit,KeyboardInterrupt기타

파이썬 2

마지막으로 throw 된 예외가 Python 2에서 기억되기 때문에 예외 스레딩 문과 관련된 객체 중 일부는 무기한 보관됩니다 (실제로는 다음 예외가 발생할 때까지). 이것이 당신에게 중요하고 마지막으로 던져진 예외를 기억할 필요가 없다면 (일반적으로) 다음과 같이하면됩니다.pass:

try:
    do_something()
except Exception:
    sys.exc_clear()

마지막으로 throw 된 예외를 지 웁니다.

파이썬 3

Python 3에서 예외 인스턴스를 보유하는 변수는삭제 된~에서 나가기.except블록. 변수가 이전에 값을 보유하고 있더라도 변수를 입력하고 종료 한 후에except그것을 막다정의되지 않은다시.


  • 예외를 제외하고 & quot; 예외 & quot;를 사용하기 때문에 받아 들여진 것보다 더 나은 대답입니다. & quot; 제외 : & quot; 다른 사람들이 지적한 것처럼 SystemExit과 KeyboardInterrupt처럼 잡기를 원하지 않는 다른 것들은 부적절하게 삼킨다. - aculich
  • +1 또한 unittest를 실행하고 예외를 예상 할 때 중요한 오류를 지 웁니다. - geographika
  • 유의 사항exc_clear파이썬 3에서 삭제되었습니다.docs.python.org/3/whatsnew/3.0.html#index-22. 파이썬 3에서 이것을 다루는 몇 가지 방법은 다음을 참조하십시오 :cosmicpercolator.com/2016/01/13/… - bcattle
  • 만나다stackoverflow.com/a/53575187/3140992여러 예외를 빠르게 무시하기위한 - citynorman

133

파이썬 3.4에서이 작업을 수행 할 수있는 새로운 방법이 있습니다.

from contextlib import suppress

with suppress(Exception):
  # your code

추가 한 커밋은 다음과 같습니다.http://hg.python.org/cpython/rev/406b47c64480

그리고 저자 인 Raymond Hettinger가이 문제와 모든 종류의 파이썬 핫스 (43:30의 적절한 비트)에 대해 이야기합니다.http://www.youtube.com/watch?v=OSGv2VnC0go

맨손으로 에뮬레이트하고 싶다면except키워드와 같은 것들을 무시KeyboardInterrupt일반적으로 사용하지는 않지만with suppress(BaseException).

편집 : 모양ignored이름이 다음으로 변경되었습니다.suppress3.4 릴리스 이전.


  • 이 솔루션이 마음에 들지 않는 이유는 3 줄을 단 1 개로 대체 한 것입니다. (시도, 제외 및 패스가 하나로 합쳐집니다.) to는 이것이 당신이 아마해야 할 일을 입증 할 것 같은 새로운 키워드를 소개하는 방법입니다 ... 그것은 적어도 당신이 잡는 예외를 로그해서는 안되는 것처럼 보입니다. - ArtOfWarfare
  • 이것은 코드를 코드에 랩핑하는 것과 같습니다.try...catch: pass따라서 블록 내부에서 예외가 발생하면 블록의 끝에서 실행이 계속됩니다. - Jack O'Connor
  • @ JackO & Connor 글쎄, 그건 쓸모가 없어 ... 나는 그것이 약속 한대로 예외를 무시할 것이라고 생각했다. - Navin
  • @ArtOfWarfare 만약 내가 정수라고 말하면, 때때로 싱글 톤 튜플 (singleton tuple)에서 그것을 줄 것이고, 내가 다른 것을 할 때 당신에게 말하지 않을 것이다; 이제 당신의 임무는 항상 저에게 정수를 돌려주는 것입니까? 아마도 여러분은 다음과 같은 것을 쓸 수있는 것에 감사 할 것입니다.with suppress(TypeError): return data[0](더 긴 예 :pastebin.com/gcvAGqEP) - Air
  • 참고로, 장고는with suppress(Exception)2017-09에서 try / except가 더 잘 수행되기 때문입니다. 이 커밋을 확인하십시오.되돌리기 "Fixed # 27818 - try / except / context를 contextlib.su로 대체 ... - stackoverYC

13

이 시도:

try:
    blah()
except:
    pass

연결된 질문


관련된 질문

최근 질문