FormatException은 메서드에 전달된 인수의 형식(포맷)이 유효하지 않을 때 발생하는 예외입니다. 주로 문자열을 숫자로 변환하는 과정에서 변환할 수 없는 형식의 값이 입력될 때 나타납니다.
FormatException이 발생하는 경우
가장 대표적인 예는 int.Parse() 메서드입니다. 이 메서드는 문자열을 정수(int)로 변환하는 역할을 하는데, 정수가 아닌 값을 전달하면 FormatException이 발생합니다.
예를 들어, 소수점이 포함된 문자열 "3.5"를 int.Parse()에 넘기면 정수로 변환할 수 없기 때문에 예외가 던져집니다.
예제 코드
using System;
class Demo {
static void Main() {
string str = "3.5";
int res = int.Parse(str);
}
}
실행 결과
위 프로그램을 실행하면 정수가 아닌 값을 전달했기 때문에 다음과 같은 오류가 발생합니다.
Unhandled Exception:
System.FormatException: Input string was not in a correct format.
FormatException 방지 방법
이러한 예외를 사전에 방지하려면 int.TryParse() 메서드를 사용하는 것이 좋습니다. TryParse는 변환에 실패해도 예외를 던지지 않고 false를 반환하므로 안전하게 처리할 수 있습니다.
using System;
class Demo {
static void Main() {
string str = "3.5";
if (int.TryParse(str, out int res)) {
Console.WriteLine($"변환 성공: {res}");
} else {
Console.WriteLine("정수로 변환할 수 없는 형식입니다.");
}
}
}
또한 소수점이 포함된 문자열이라면 double.Parse()나 decimal.Parse()처럼 해당 형식에 맞는 파서를 사용하는 것도 좋은 해결책입니다.
정리
- FormatException은 인수의 형식이 잘못되었을 때 발생합니다.
int.Parse()에 정수가 아닌 문자열을 넘기면 예외가 발생합니다.TryParse()를 사용하면 예외 없이 안전하게 변환 여부를 확인할 수 있습니다.