Try [v1.1.04+]
하나 이상의 서술문들을 (명령어나 표현식을) throw 명령어가 던지는 실행시간 에러와 예외로부터 보호합니다.
Try Statement
Try { Statements }
논평
try 명령어는 보통 다음에 블록이 따라옵니다 - 활괄호로 둘러 싸인 하나 이상의 서술문 (명령어나 표현식). 하나의 서술문만 실행한다면, try와 같은 줄 또는 다음 줄에 배치할 수 있고, 활괄호를 생략할 수 있습니다. try가 에러를 잡을 때 정확하게 한 번만 실행되는 코드를 지정하려면, catch 명령어를 사용하십시오.
실행시간 에러가 일어나면 throw 명령어 또는 프로그램이 예외를 던질 수 있습니다. try 블록 안에서 또는 블록에서 호출한 함수 안에서 예외가 던져질 때, 다음과 같은 일이 일어납니다:
- 상응하는 catch 서술문이 있다면, 실행은 거기에서 계속됩니다.
- catch 서술문은 없지만 finally 서술문이 있다면, 그것이 실행됩니다. 그러나 일단 끝나면 예외는 자동으로 다시 던져집니다.
- catch 서술문도 없고 finally 서술문도 없다면, 실행은 다음 줄 try 블록 밖으로 계속됩니다.
try 블록이 실행 중이지 않은 동안에 예외가 던져지면, 에러 메시지를 보여주고 현재 쓰레드를 종료합니다.
One True Brace (OTB) 스타일을 선택적으로 try 명령어에 사용할 수 있습니다. 예를 들어:
try { ... } catch e { ... }
관련 항목
예제
; 예제 #1: try/catch/throw의 기본 개념. try ; 코드를 실행해 봅니다. { HelloWorld() MakeToast() } catch e ; 위의 블록에서 일으킨 첫 번째 에러/에외를 처리합니다. { MsgBox, 예외가 던져졌습니다!`n구체적으로 다음과 같습니다: %e% Exit } HelloWorld() ; 언제나 성공합니다. { MsgBox, Hello, world! } MakeToast() ; 언제나 실패합니다. { ; try 블록의 에러 처리에 곧바로 점프합니다: throw A_ThisFunc " is not implemented, sorry" }
; 예제 #2: ErrorLevel 대신에 try/catch 사용하기. try { ; 다음 예제는 어떤 유형의 파일을 백업합니다: FileCopy, %A_MyDocuments%\*.txt, D:\Backup\Text documents FileCopy, %A_MyDocuments%\*.doc, D:\Backup\Text documents FileCopy, %A_MyDocuments%\*.jpg, D:\Backup\Photos } catch { MsgBox, 16,, 파일을 백업하는 동안 문제가 있었습니다! ExitApp }
; 예제 #3: COM 에러 다루기. try { obj := ComObjCreate("ScriptControl") obj.ExecuteStatement("MsgBox ""This is embedded VBScript""") obj.InvalidMethod() ; 이 줄은 실행 시간 에러를 일으킵니다. } catch e { ; e를 담고 있는 객체에 관한 더 자세한 정보는 Exception()를 참조하십시오. MsgBox, 16,, % "Exception thrown!`n`nwhat: " e.what "`nfile: " e.file . "`nline: " e.line "`nmessage: " e.message "`nextra: " e.extra }
; 예제 #4: try-catch 서술문들을 내포하기. try Example1() ; 한 줄 서술문은 Try 명령어와 같은 줄에 있을 수 있습니다. catch e MsgBox, Example1() threw %e%. Example1() { try Example2() catch e { if e = 1 throw e ; 예외를 다시 던져서 호출자가 받을 수 있도록 합니다. else MsgBox, Example2() threw %e%. } } Example2() { Random, o, 1, 2 throw o }