태그 보관물: exceptions

exceptions

프로그래밍 언어에서 오류가“예외”로 명명 된 이유는 무엇입니까? 나는 영어 원어민이 아니지만

나는 실제로 그것에 대해 꽤 오랫동안 생각 해왔다. 나는 영어 원어민이 아니지만 여전히 수년간의 프로그래밍 경험을 가지고 있으며 항상 나에게 이것을 물었습니다. 오류로 이름이 Exception 인 이유는 무엇입니까?

PageNotFoundError대신 사용할 수 있습니다 PageNotFoundException.



답변

전혀 오류 일 필요는 없습니다. 페이지가 없다는 사실은 실제 오류보다는 흥미로운 사실 ​​일 수 있습니다. 그들은 거의 항상 오류로 사용되는 것처럼 보입니다. 그러나 때로는 루프에서 벗어나거나 문자열이 유효한 숫자가 아니라는 것을 알려주는 데 사용됩니다. 상당히 정상적인 수익의 일부로 방대한 양의 유용한 데이터를 보유하고 반환하는 데 사용할 수 있습니다. (일부 언어는 예외로 인해 속도가 느리므로이 경우 자주 던지는 것은 나쁜 생각입니다.) 이론상 예외는 단지 “정상 반품을 수행하지 말고 관심있는 사람을 찾을 때까지 통화 스택을 올리십시오”라는 의미입니다. 이것에서. “

널 포인터 예외조차 당신에게 큰 의미가 없을 수도 있습니다. 다른 사람의 코드를 호출 한 다음 폭발 할 가능성이 있다는 것을 알고 널 오류를 알리는 메시지를 인쇄하고 작업을 계속 수행하기 때문에 널 포인터 예외를 포착합니다.


답변

예외 메커니즘이 항상 오류를 알리는 데 사용되는 것은 아닙니다 . 오류를 포함하여 처리 할 별도의 코드 경로가 필요한 일반적인 상황에서는 예외가 발생합니다. 예를 들어, 존재하지 않는 파일 이름을 제공하거나 숫자 필드에 숫자 대신 문자를 입력하는 사용자는 특별한 처리가 필요한 예외적 인 상황이지만 오류는 아닙니다.

Java와 같은 일부 프로그래밍 환경에서는 Error“실제 오류”를보고하기 위해 특수 응용 프로그램이 제공되며, 합리적인 응용 프로그램이 처리하지 않아야하는 상황입니다. 이러한 개체는 예외를 전달하는 데 사용되는 것과 동일한 메커니즘을 사용하여 제공되지만 복구 할 수없는 상황 신호의 특별한 의미를 갖습니다.


답변

그 기원에 대한 어원 학적 연구는 없지만 “오류”라는 용어를 사용하는 것이 모든 상황에서 정확하지는 않다는 것을 이해할 수 있습니다. almostSharepointMaster가 언급했듯이 오류와 예외를 분리 된 엔티티로 생각하는 것이 좋습니다.

고급 프로그래밍 언어를 사용하는 경우 예외는 항상 오류로 인해 발생한다고 가정하는 것이 좋습니다.하지만 dasblinkenlight 와도 동의하지만 예외가 항상 오류의 결과는 아니라는 데 동의합니다. 예를 들어, 예외를 사용하여 스레드를 공동으로 종료합니다.

“예외”라는 용어를 처음 본 것은 80386 어셈블리 매뉴얼에있었습니다. 나는 그것을 볼 때 즉시 자연스럽게 보였다는 것을 기억합니다. 어셈블리에 오류가 없기 때문에 오류가 정확하지 않다고 부르는 것; 단순히 프로세서가 처리 할 수없는 조건이 있습니다 (프로그래머, 사용자 또는 시스템의 오류 인 경우 프로세서는 프로세서와 완전히 무관합니다). 인텔이 실제로 그 용어를 유래했는지 아닌지는 모르겠지만 아마도 …


답변

일반적으로 Exception은 out_of_range존재하지 않는 벡터 또는 배열의 요소에 액세스 할 때 발생하는 C ++ 의 예외 와 같이 올바르지 않지만 복구 할 수있는 이벤트의 이름을 지정하는 데 사용됩니다 . 분명히 그러한 사건이 정확하지는 않지만 전체 프로그램이 충돌하는 것은 아닙니다.

반면에 오류는 일반적으로 모든 것을 중단 해야하는 이름을 지정하는 데 사용되며 스택 오버플로와 같은 것은 프로그램이 내부적으로 처리 할 수 ​​없으므로 프로그램을 종료 해야하는 이벤트의 예입니다. 다시 말해, 오류는 크지 만 예외는 비교적 작습니다.


답변

이것이 오류 처리의 “진화”와 더 관련이 있다고 생각합니다. C / C ++ (예외 처리가 추가되기 전) 언어에서 함수가 실패하면 반환 값을 통해서만 알 수 있습니다 (예 : HRESULTwin32). 따라서 일반적으로 각 함수 호출의 종료 코드를 잡아서 확인했습니다. 이 접근 방식은 코드를 더 복잡하게 만듭니다. 그리고 종종 개발자는 게으름에서 이러한 검사를 추가하지 않아도됩니다.

예외 처리가 도입되면서 개발자는 이제 오류를 발생시키는 두 가지 옵션 을 갖게되었습니다 . 따라서 “예외”단어는 오류를 “종료 상태”오류와 구별하기 위해 사용되었습니다. 일정 기간이 지나면 코드를 훨씬 쉽게 읽고 유지 관리 할 수 ​​있고 오류 처리 논리를 가질 수있는 단일 장소가있을 수 있기 때문에 예외 처리는 오류를 전파하는 일반적인 방법이되었습니다.


답변

파이썬에서는 ABCError Eg : KeyError, IndexError로 명명됩니다.

http://docs.python.org/library/exceptions.html

그래서 나는 그것이 당신이 사용하는 언어에 달려 있다고 생각합니다.


답변

오류가 발생하면 시스템 또는 현재 실행중인 응용 프로그램이 오류에 대한 정보가 포함 된 예외를 발생시켜보고합니다. 예외가 발생하면 응용 프로그램이나 기본 예외 처리기가 예외를 처리합니다.

오류는 오류를 자세히 설명하는 예외에 영향을 미치므로 모든 것이 예외 인 예외는 아닙니다.

http://msdn.microsoft.com/en-us/library/system.exception.aspx