Try [v1.1.04+]

하나 이상의 서술문 (명령어나 표현식)을 throw 명령어가 던지는 실행시간 에러와 예외로부터 보호합니다.

Try Statement
Try
{
    Statements
}

논평

try 명령어는 보통 다음에 블록이 따라옵니다 - 활괄호로 둘러 싸인 하나 이상의 서술문 (명령어나 표현식). 하나의 서술문만 실행한다면, try와 같은 줄 또는 다음 줄에 배치할 수 있고, 활괄호를 생략할 수 있습니다. try가 에러를 잡을 때 정확하게 한 번만 실행되는 코드를 지정하려면, catch 명령어를 사용하십시오.

실행시간 에러가 일어나면 throw 명령어 또는 프로그램이 예외를 던질 수 있습니다. try 블록 안에서 또는 블록에서 호출한 함수 안에서 예외가 던져질 때, 다음과 같은 일이 일어납니다:

try 블록이 실행 중이지 않은 동안에 예외가 던져지면, 에러 메시지를 보여주고 현재 쓰레드를 종료합니다.

One True Brace (OTB) 스타일을 선택적으로 try 명령어에 사용할 수 있습니다. 예를 들어:

try {
    ...
} catch e {
    ...
}

Catch, Throw, Finally, 블록, OnError()

예제

Demonstrates the basic concept of 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"
}

Demonstrates the use of try/catch instead of ErrorLevel.

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
}

Demonstrates the use of try/catch dealing with COM errors. For details about the COM object used below, see Using the ScriptControl (Microsoft Docs).

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
}

Demonstrates nesting try-catch statements.

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
}