반응형
try-catch 예외처리는 프로그램에서 의도치 않은 오류가 발생했을 때 오류를 처리해줍니다.
try : 실행하고자 하는 코드
catch : 에러또는 예외가 발생했을 때
finally : 리소스 해제 등의 후처리를 해줍니다. try문이 실행되다가 예외가 발생하면 try문의 나머지 부분을 읽지 않고 바로 catch문으로 넘어가게 됩니다.
try
{
//실행하고자 하는 코드
Console.WriteLine("try");
}
catch(Exception ex)
{
Console.WriteLine("catch");
return ex.Message;
}
finally
{
Console.WriteLine("finally");
}
-> 정상 종료(예외 발생 x) 시 출력 :
try
finally
-> 예외가 발생했을 때의 출력 :
catch
에러 메시지
finally
try문에서 throw를 쓰면 사용자가 스스로 예외 상황을 만들 수 있습니다.
try
{
if(number == 0) throw new Exception("Exception : number = 0");
}
* catch(Exception ex)
catch문에 모든 예외를 받아오는 Exception을 사용할 경우 편할 수는 있지만 섬세한 작업은 할 수 없습니다.
예를 들면, 숫자를 0으로 나눴을 때 나오는 예외처리는 DivideByZeroException으로 받아오면 더 섬세한 처리를 할 수 있습니다.
추가적인 예외의 종류는 아래 표에 있습니다.
예외 종류
|
설명
|
ArgumentException
|
메서드에 전달 되는 null이 아닌 인수가 잘못되었다.
|
ArgumentNullException
|
메서드에 전달 되는 인수가 null이다.
|
ArgumentOutOfRangeException
|
인수가 유효한 값 범위를 벗어났다.
|
DirectoryNotFoundException
|
디렉터리 경로 일부가 잘못되었다.
|
DivideByZeroException
|
0으로 나누었다.
|
DriveNotFoundException
|
드라이브가 없거나 사용할 수 없다.
|
Exception
|
모든 종류의 예외를 처리할 수 있다.
|
FileNotFoundException
|
파일이 없다.
|
FormatException
|
문자열에서 변환할 수 있는 적절 한 형식이 아니다.
|
IndexOutOfRangeException
|
인덱스가 배열 또는 컬렉션의 범위를 벗어났다.
|
InvalidOperationException
|
개체의 현재 상태에서 메서드 호출을 사용할 수 없다.
|
KeyNotFoundException
|
컬렉션의 멤버에 액세스 하는 데 지정 된 키를 찾을 수 없다.
|
NotImplementedException
|
메서드 또는 작업이 구현 되지 않았다.
|
NotSupportedException
|
메서드 또는 작업이 지원 되지 않는다.
|
ObjectDisposedException
|
삭제 된 개체에 대한 작업을 수행했다.
|
OverflowException
|
산술, 캐스팅 또는 변환 작업을 수행 하면 오버플로가 발생한다.
|
OverflowException
|
작업 결과가 대상 데이터 형식의 범위를 벗어났다.
|
PathTooLongException
|
경로 또는 파일 이름이 시스템에서 정의한 최대 길이를 초과한다.
|
PlatformNotSupportedException
|
현재 플랫폼에서 작업이 지원 되지 않는다.
|
RankException
|
차원 수가 잘못되었다.
|
TimeoutException
|
작업에 할당 된 시간 간격이 만료 되었다.
|
UriFormatException
|
잘못 된 URI (Uniform Resource Identifier)가 사용 되었다.
|
반응형
'[Unity] > [C#]' 카테고리의 다른 글
[C#] internal 액세스 한정자 (0) | 2022.09.18 |
---|---|
[C#] 물음표 연산자 3종류(feat. '?.', '??', '?') (0) | 2022.09.17 |
[C#] string 출력 방법(feat. Console.Write) (0) | 2022.06.02 |
[C#] 오버라이딩과 오버로딩 (0) | 2022.05.22 |
[C#] delegate와 event의 차이 (0) | 2022.05.18 |