developer tip

Try Catch 블록을 사용하는 경우

optionbox 2020. 12. 2. 08:30
반응형

Try Catch 블록을 사용하는 경우


좋아, 이것은 매우 멍청한 질문 일 수 있지만 PHP 문서와 여러 인터넷 검색에서 그것에 대해 전혀 알지 못합니다.

애플리케이션을 개선하기 위해 언제 try-catch 블록을 사용해야합니까?

치명적인 오류를 방지하기 위해서만 try-catch 블록을 사용해야한다고 말하는 사람을 읽었습니다. 다른 사람이 예상치 못한 오류에만 사용해야한다고 말하는 것을 읽었습니다 (예상치 못한 오류 인 경우 어떻게하면 try-catch로 방지 할 수 있습니까? 모든 애플리케이션 코드를 try 블록 안에 넣어야합니까?). 다른 사람들은 단순히 try-catch 블록이 확장 될 수 있기 때문에 어디에서나 사용해야한다고 말합니다 (Exception 클래스 확장). 마지막으로 누군가는 PHP try-catch 블록이 매우 잘못 구현 되었기 때문에 완전히 쓸모 없다고 말합니다. (이에 대해 성능에 대한 좋은 질문을 찾았습니다).

이 주제는 매우 이상하고 혼란스러운 것 같습니다. 누군가 나를 밝힐 수 있습니까?


이 주제는 매우 이상하고 혼란스러운 것 같습니다. 누군가 나를 밝힐 수 있습니까?

명확히. 저는 PHP 사용자는 아니지만 ActionScript, Java 및 JavaScript에서 try / catch로 작업 한 후 약간의 통찰력을 가질 수 있습니다. 하지만 다른 언어와 플랫폼은 try / catch에 대해 다른 용도를 권장한다는 점을 명심하십시오. 그건 ...

try / catch 사용을 권장하는 유일한 경우는 다음과 같은 모국어 기능을 사용하는 경우입니다.

  1. 오류 / 예외를 던질 수 있습니다.
  2. 오류 / 예외를 유발하는 어리석은 일을 하려는지 여부를 감지하는 도구를 제공하지 않습니다. 예 : ActionScript에서 열려 있지 않은 로더를 닫으면 오류가 발생하지만 로더에는 확인할 isOpen 속성이 없으므로 완전히 의미없는 오류를 없애기 위해 try / catch로 래핑해야합니다.
  3. 오류 / 예외는 실제로 의미 없습니다.

당신이 나열한 예제를 가지고 그 목록과 어떻게 일치하는지 살펴 보자.

치명적인 오류를 방지하기 위해서만 try-catch 블록을 사용해야한다고 말하는 사람을 읽었습니다.

AS의 loader.close () 함수의 경우 이것은 좋은 조언입니다. 그것은 치명적 오류이며, 모두 사소한 실수로 인한 것입니다. 반면에 AS의 거의 모든 오류는 애플리케이션을 중단시킵니다. 그런 다음 모두 try / catch로 포장 하시겠습니까? 절대적으로하지! "치명적인 오류"는 어떤 이유로 치명적입니다. 이는 심각한 문제가 발생했으며 잠재적으로 "정의되지 않은"상태에서 응용 프로그램을 계속하는 것은 어리석은 일임을 의미합니다. 오류가 발생했음을 알고 그냥 놓아 두는 것보다 수정하는 것이 좋습니다.

예상치 못한 오류에만 사용해야한다고 다른 사람이 읽었습니다.

그것은 더 나쁩니다. 그것들을 침묵시키는 것은 결코 그들을 찾을 수 없다는 것을 의미하기 때문에 그것들은 당신이 침묵하고 싶지 않은 오류들입니다. 삼키지 않을 수도 있지만 .. 기록하고있을 수도 있습니다. 하지만 아무 일도 일어나지 않은 것처럼 시도 / catch / log / 계속하여 프로그램이 잠재적으로 위험하고 예상치 못한 상황에서 실행되도록 허용하는 이유는 무엇입니까? 오류로 인해 치아를 걷어차 고 수정하십시오. 다른 사람이 작성한 프로그램에서 잘못된 것을 디버깅하려고 시도하는 것보다 조금 더 실망 스럽습니다. 모든 것을 try / catch 블록에 래핑 한 다음 로그를 무시했기 때문입니다.

다른 사람들은 단순히 try-catch 블록이 확장 될 수 있기 때문에 어디에서나 사용해야한다고 말합니다 (Exception 클래스 확장).

당신이 던지는 일을하고 있고 당신의 프로그램에서 예외적 인 상황에 대해 스스로에게 경고하려고한다면 이것에 대한 잠재적 인 장점이 있습니다.하지만 왜 당신 자신이 던진 오류를 시도 / 캐치합니까? 이빨을 차게 한 다음 더 이상 오류를 던질 필요가 없도록 수정하십시오.

마지막으로 누군가는 PHP try-catch 블록이 매우 잘못 구현 되었기 때문에 완전히 쓸모 없다고 말합니다. (이것은 성능에 대한 좋은 질문을 찾습니다).

그럴 수도 있습니다. 그래도 대답 할 수 없습니다.

그래서 ... 이것은 약간의 종교적인 질문 일 수 있고, 사람들이 저에 동의하지 않을 것이라고 확신합니다.하지만 저의 특별한 관점에서 볼 때 그것은 제가 try / catch에 대해 수년간 배운 교훈입니다.


다른 사람들은 당신에게 다른 것을 말할 것입니다. 그러나 이것이 제가 생각하는 것입니다. 특히 웹 애플리케이션의 경우입니다.

전체 페이지는 사용자에게 오류 메시지를 표시하는 try / catch에 있어야합니다. 오류 메시지는 보안 문제이기 때문에 사용자에게 무슨 일이 일어 났는지 자세히 알려 주면 안됩니다. 오류에 대한 정보를 로그 파일에 기록해야합니다.

다른 경우는 정상적인 업무 운영에서 무언가 잘못 될 수있는 경우입니다. PHP는 예외가 아니기 때문에 많이 발생하지 않을 수 있습니다. 기본적으로 실패 할 때 예외를 발생시키는 함수가 발생하면 예외를 포착하고 그 경우에 다른 작업을 수행 할 수 있습니다.

일반적으로 귀하의 질문은 집의 자격을 향상시키기 위해 망치를 어떻게 사용할 것인지 묻는 것과 같습니다. 특정 동작을 구현하는 데 도움이되는 예외를 사용하십시오. 예외를 사용할 장소를 찾지 마십시오.


단순히 선호도의 문제라고 생각하지만, 제 경험상 최대한 많이 사용 하시길 바랍니다.

우리는 현재 직장에서 개발하고있는 애플리케이션 (중요한 경우 Zend Framework 사용)에서 하나의 try..catch 블록을 사용하여 애플리케이션 전체에서 사용자에게 표시되는 모든 예외를 포착합니다. 예를 들어 오류 500 및 예외는 더 많은 것으로 기록됩니다. 데이터베이스에 정보. 개인적으로 PHP 애플리케이션의 경우 예외가 확장 가능하고 기본적으로 필요한 모든 기능을 작성할 수 있으므로이 접근 방식을 좋아합니다.


저는 주로 데이터베이스 호출에 대해 Try / Catch를 사용합니다. 특히 입력, 업데이트 및 삭제 등입니다.

나는 때때로 뭔가 잘못 될 가능성이있는 동적 데이터와 배열을 사용하는 배열과 루프를 사용하는 복잡한 데이터 처리를 중심으로 사용합니다. 즉, 배열 요소 누락 또는 무언가 (일반적으로 그런 것을 확인합니다).

또한 데이터에 문제가 있거나 소스 파일에 액세스 할 수있는 외부 또는 외부 데이터 소스에서 데이터를 가져 오는 것과 같이 완전히 제어 할 수없는 작업에 대해서도 사용합니다.

"예기치 않은 오류"가 의미하는 것은 파일을 "포함"하기 전에 파일이 존재하는지 확인하는 것과 같은 좋은 프로그래밍 관행을 통해 문제를 예방할 수없는 곳이라고 생각합니다. 예상 할 수있는 일부 문제는이를 방지하기 위해 좋은 관행을 사용합니다. try / catch로 포장하여 우연에 맡기지 마십시오.

모든 곳에서해야하는 것처럼 좋은 프로그래밍 관행을 대신 사용하십시오. 모든 곳에서 try / catch를 모든 것에 대한 게으른 단축키로 사용하지 마십시오. 그것은 중대한 과잉입니다.


@scriptocalypse에 동의합니다. 사실 저는 PHP에서 두 가지 상황에서만 try / catch 블록을 사용합니다.

  1. 일부 외부 (내 코드 내부가 아님) 문제 또는 DB 오류가 발생할 수있는 경우 :

    • 다른 소스에서 데이터를 가져 오기 (예. curl)
    • 파일에서 데이터 가져 오기
    • DB 예외
  2. CMS 등의 다른 시스템에서 작업하고 특정 동작을 재정의하려는 경우. 예를 들어 예외가 발생하지 않고 예외 메시지가 뷰로 반환되는 것을 원하지 않습니다.


모든 곳에 try catch 블록을 넣을 수 없습니다.

However during application testing, exceptions generated should alert you to places where you need try catches. This is one reason why you should run thorough testing of you application/code.

If you see a place where you think you need it, i would put one in.

EDIT: ok you CAN put them everywhere, but you need some sense as to where to put them in your code.


I normally put Try and Catch around areas in the code that have external forces acting on it that I have no control over. For example, Opening and reading external files.. you have no control that at some point in the reading of the file, the file becomes corrupted or something else happens that you can not control like the file server dc's or something

참고URL : https://stackoverflow.com/questions/5199146/when-to-use-try-catch-blocks

반응형