programing

Try Catch 블록을 사용해야 하는 경우

powerit 2023. 8. 26. 12:27
반응형

Try Catch 블록을 사용해야 하는 경우

좋아요, 이것은 매우 멍청한 질문일 수도 있지만, 저는 그것에 대한 PHP 설명서와 몇몇 인터넷 검색이 저에게 그것에 대해 전혀 알려주지 않는다는 것을 발견했습니다.

애플리케이션을 개선하려면 언제 시도 블록을 사용해야 합니까?

치명적인 오류를 방지하기 위해서만 시도 블록을 사용해야 한다고 말하는 사람을 읽었습니다.다른 사람이 예상치 못한 오류가 있을 때만 사용해야 한다고 말하는 것을 읽었습니다(뭐라고요?예상치 못한?예상치 못한 오류인 경우 트라이캐치를 사용하여 어떻게 방지할 수 있습니까? 모든 애플리케이션 코드를 트라이 블록 안에 넣어야 합니까?다른 사람들은 단순히 트라이캐치 블록을 확장(예외 클래스 확장)할 수 있기 때문에 어디서나 사용해야 한다고 말합니다.마지막으로 누군가는 PHP 트라이캐치 블록이 매우 잘못 구현되었기 때문에 전혀 쓸모가 없다고 말합니다. (이에 대해 저는 성능에 대한 멋진 SO 질문을 발견했습니다.

제가 보기에 이 주제는 매우 낯설고 혼란스러운 것 같습니다.누가 불 좀 붙여 주시겠어요?

제가 보기에 이 주제는 매우 낯설고 혼란스러운 것 같습니다.누가 불 좀 붙여 주시겠어요?

물론입니다.저는 PHP 사용자는 아니지만, 액션스크립트, 자바, 자바스크립트에서 try/catch로 작업한 후 약간의 통찰력을 가질 수 있습니다.그러나 언어와 플랫폼에 따라 시도/획득 용도가 다르다는 점을 명심해야 합니다.그러니까...

try/catch를 사용할 것을 권장하는 유일한 경우는 네이티브 언어 기능을 사용하는 경우입니다.

  1. 오류/예외를 발생시킬 수 있음
  2. 오류/예외를 일으킬 수 있는 어리석은 행동을 하려는 것인지 탐지할 수 있는 도구를 제공하지 않습니다.예: ActionScript에서 열려 있지 않은 로더를 닫으면 오류가 발생하지만 로더에는 확인할 isOpen 속성이 없기 때문에 전혀 의미 없는 오류를 침묵시키기 위해 시도/캐치로 래핑해야 합니다.
  3. 오류/예외는 정말 의미가 없습니다.

목록에 있는 예를 들어 해당 목록과 어떻게 일치하는지 살펴보겠습니다.

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

AS의 loader.close() 함수의 경우, 이것은 좋은 조언입니다.그것은 치명적인 오류이며, 모든 것은 사소한 실수에서 비롯됩니다.반면에, AS의 사실상 모든 오류는 당신의 애플리케이션을 중단시킬 것입니다.그러면 모두 시도/어획물로 포장해 주시겠습니까?당연히 아니죠!"치명적 오류"는 치명적인 이유가 있습니다.이는 심각한 문제가 발생했다는 것을 의미하며 애플리케이션이 잠재적으로 "정의되지 않은" 상태로 계속되는 것은 어리석은 일입니다.오류가 발생했음을 알고 그냥 내버려두기보다는 수정하는 것이 좋습니다.

예상치 못한 오류가 있을 때만 사용해야 한다는 다른 사람의 말을 읽었습니다.

그건 더 심해요.그것들은 정확히 여러분이 침묵시키고 싶지 않은 오류들입니다. 왜냐하면 그것들을 침묵시키는 것은 여러분이 결코 그것들을 찾을 수 없다는 것을 의미하기 때문입니다.삼키지는 않을 수도 있지만,아마도 당신은 그것들을 기록하고 있을 것입니다.하지만 잠재적으로 위험하고 예상치 못한 상태에서 프로그램을 실행하도록 허용하면서 아무 일도 일어나지 않은 것처럼/캐치/로그/계속하려고 하는 이유는 무엇입니까?그 오류가 당신의 이를 걷어차도록 내버려두고 그것을 고치면 됩니다.다른 사용자가 작성한 프로그램에서 잘못된 것을 디버그하려고 하는 것보다 더 짜증나는 것은 없습니다. 왜냐하면 그들은 모든 것을 시도/캐치 블록으로 포장한 다음 기록을 소홀히 했기 때문입니다.

다른 사람들은 단순히 트라이캐치 블록을 확장(예외 클래스 확장)할 수 있기 때문에 어디서나 사용해야 한다고 말합니다.

만약 당신이 던지기를 하고 있고 당신의 프로그램에서 예외적인 상황에 대해 스스로를 경계하려고 한다면, 이것은 잠재적인 장점이 있습니다.하지만 왜 자신의 실수를 시도/수정해야 합니까?그것이 당신의 이를 때리게 한 다음, 당신이 더 이상 오류를 던질 필요가 없도록 그것을 고칩니다.

마지막으로 누군가는 PHP 트라이캐치 블록이 매우 잘못 구현되었기 때문에 전혀 쓸모가 없다고 말합니다. (이것에 대해 저는 성능에 대한 멋진 SO 질문을 발견했습니다.)

그럴 수도 있어요하지만 저는 대답할 수 없습니다.

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

다른 사람들이 당신에게 다른 것들을 말해줄 것입니다.하지만 제 생각은 이렇습니다. 특히 웹 애플리케이션의 경우에는 그렇습니다.

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

다른 하나는 정상적인 업무 운영에 문제가 생길 수 있는 경우입니다.PHP는 매우 예외적으로 행복하지 않기 때문에 이러한 일이 매우 많이 발생하지 않을 수 있습니다.기본적으로 예외가 실패했을 때 예외를 던지는 함수에 부딪히면 예외를 포착하여 다른 작업을 수행할 수 있습니다.

일반적으로, 여러분의 질문은 집의 자격을 향상시키기 위해 망치를 어떻게 사용할 것인지 묻는 것과 같습니다.예외를 사용하여 특정 동작을 구현할 수 있습니다.예외를 사용할 장소를 찾지 않습니다.

단순히 취향의 문제라고 생각합니다만, 제 경험으로 볼 때 가능한 한 많이 사용해 주시기 바랍니다.

현재 직장에서 개발 중인 애플리케이션(중요한 경우 Zend Framework 사용)에서는 단일 시도를 사용합니다.catch block을 사용하여 응용 프로그램 전체의 모든 예외를 포착합니다. 예를 들어 오류 500초 및 예외가 데이터베이스에 더 많은 정보와 함께 기록됩니다.저는 개인적으로 예외가 확장 가능하고 기본적으로 필요한 기능을 모두 작성할 수 있기 때문에 PHP 애플리케이션의 경우 이 접근 방식을 좋아합니다.

주로 데이터베이스 호출, 특히 입력, 업데이트 및 삭제 등과 관련하여 Try/Catch를 사용합니다.

저는 가끔 어레이와 루프가 있는 복잡한 데이터 처리에 사용합니다. 동적 데이터와 어레이를 사용하면 어레이 요소가 누락되거나 잘못될 가능성이 있습니다(일반적으로 어레이 요소가 누락된 경우).

또한 데이터에 문제가 있을 수 있는 외부 또는 외부 데이터 원본에서 데이터를 가져오거나 원본 파일에 액세스하는 등 완벽하게 제어할 수 없는 작업을 수행할 때도 마찬가지입니다.

"예상치 못한 오류"란 파일을 "포함"하기 전에 파일이 존재하는지 확인하는 등의 좋은 프로그래밍 관행을 통해 문제를 방지할 수 없는 경우, 예상할 수 있는 문제가 있으므로 좋은 방법을 사용하여 방지하는 것을 의미한다고 생각합니다.트라이/캐치로 포장해서 운에 맡기지 마세요.

모든 곳에서 해야 하는 것처럼 대신 좋은 프로그래밍 방법을 사용합니다.시도/캐치를 모든 곳, 모든 곳에 대한 게으른 지름길로 사용하지 마십시오.그건 중대한 과잉 살상입니다.

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

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

    • 다른 소스에서 데이터를 가져오는 중(예:curl)
    • 파일에서 데이터 가져오기
    • DB-예외사항
  2. CMS 등 다른 시스템 내부에서 작업하는 경우 특정 동작을 재정의하고 싶습니다.예를 들어 예외 메시지가 표시되는 것이 아니라 예외 메시지가 보기로 반환되는 것을 원합니다.

어디에나 시도 블록을 둘 수는 없습니다.

그러나 응용 프로그램 테스트 중에 생성된 예외는 사용자에게 시도 캐치가 필요한 위치를 알려줍니다.이것이 당신이 당신의 응용 프로그램/코드에 대한 철저한 테스트를 실행해야 합니다.

만약 당신이 그것이 필요하다고 생각하는 곳을 본다면, 저는 그것을 넣을 것입니다.

편집: 좋아요. 어디에나 둘 수 있지만 코드의 어디에 둘지에 대한 감각이 필요합니다.

저는 보통 코드에서 외부의 힘이 작용하는 영역을 중심으로 시도와 포착을 하는데, 이 영역은 제가 통제할 수 없는 영역입니다.예를 들어 외부 파일 열기 및 읽기.파일 읽기의 어느 시점에서 파일이 손상되거나 파일 서버 DC 등과 같이 제어할 수 없는 다른 일이 발생하는 것을 제어할 수 없습니다.

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

반응형