2013-08-05 3 views
0

프로그램을 종료 할 때 raise를 사용하는 이유는 무엇입니까? 충돌을 허용하는 것이 효과적이지 않습니까?오류 발생의 목적은 무엇입니까?

try-except 블록을 생략하면 0으로 나누고 그 이유를 표시 할 때 함수가 충돌합니다. 아니면 내가 모르는 다른 용도가 있습니까?

def div(x,y): 
    try: 
     return(x/y) 
    except ZeroDivisionError as problem: 
     raise (problem) 
+0

오류가 발생하면 프로그램이 중단되지 않도록 오류 처리를 사용합니다. Microsoft Word 또는 Chrome과 같이 더 복잡하고 중요한 응용 프로그램에서는 사용자가 존재하지 않는 웹 페이지를 열려고하는 것처럼 작은 오류가 발생하면 사용자에게이를 알리고 계속 프로그램을 사용하게 할 수 있습니다. 예외가 처리되지 않으면 프로그램이 중단되고 종료됩니다. 아무도 원하지 않습니다. – erdekhayser

답변

1

나는 귀하의 경우 효과가 동일합니다. 그러나 오류 (클린업 등)가 발생할 경우 몇 가지 추가 논리를 수행하고 "잘못된 데이터, 입력을 확인하십시오"라는 메시지와 같이 원래 시스템의 낮은 레벨 오류 대신 다른 (아마도 사용자 정의) 오류를 발생시킬 수 있습니다. . 그리고 이것은 오류를 잡아 내고 다른 오류를 일으킬 수 있습니다.

1

raise를 사용할 때 (이 경우) 아무런 포인트가 없습니다. 일반적으로, 당신은 거기에 "뭔가 다른"일을 할 수있는 코드를 가지고 있습니다 - 디버그 정보를 더 출력하고, 로그 데이터를 쓰고, 다른 매개 변수 집합을 사용하여 작업을 다시 시도하는 등의 일을 할 수 있습니다.

예외가 발생했을 때 많은 가치가 있는지 확신하지 못합니다. 예외를 다시 발생 시키면 누군가 (아마) 일종의 코드를 작성하려고했지만 그곳에 결코 가지 못했던 것처럼 보입니다. . 예외 처리에 대한 사용 사례

훌륭한 예는 위키 처리 파이썬 예외에 ->http://wiki.python.org/moin/HandlingExceptions

0

예외를 다시 올리는 이유는 어떤 코드 것은 당신이 그것을 처리 할 수있는 기회를 호출 수 있도록하는 것입니다 너 자신을 다룰 무언가를 한 후에. 예를 들어, 사용중인 파일을 닫은 경우 (청결 함이 좋기 때문에) 코드를 계속할 수 없습니다.

예외를 처리하기 위해 아무 것도하지 않으려한다면, 예외 처리기를 작성할 필요가 없습니다.

예외를 다시 발생시키는 올바른 방법은 단순히 인수없이 raise을 사용하는 것입니다. 이 방법은 예외를 잡는 사람 (또는 스크립트 사용자, 아무도 catch하지 않는 경우)이 예외가 원래 발생 된 위치를 알려주는 올바른 스택 추적을 가져옵니다.

관련 문제