1. 소개
Python으로 프로그래밍할 때, 데이터 타입 변환은 중요한 기술입니다. 특히 문자열과 숫자 사이를 변환하는 능력은 데이터 입출력 및 계산에 필수적입니다. 예를 들어, 사용자가 폼에 입력한 문자열을 계산을 위해 숫자로 변환하거나, 계산 결과를 화면에 표시하기 위해 숫자를 문자열로 포맷해야 할 때가 많습니다.
하지만 서로 다른 타입의 데이터를 섞으면 오류가 발생할 수 있으므로, 초보자는 주의가 필요합니다. 이 글에서는 Python에서 “문자열을 숫자로”와 “숫자를 문자열로” 변환하는 방법을 실용적인 예시와 함께 오류 처리 및 특수 경우에 대한 자세한 설명과 함께 소개합니다. 기본부터 고급까지 Python 프로그래밍 역량을 키우는 데 도움이 되길 바랍니다.
다음 섹션에서는 Python의 기본 타입 변환 방법을 자세히 설명합니다.
2. Python에서의 기본 타입 변환
Python에서는 데이터 타입이 다르면 직접 연산 제한되는 경우가 많으며, 서로 다른 타입 간에 데이터를 변환해야 합니다. 문자열을 숫자로, 혹은 그 반대로 변환하는 방법을 이해하면 보다 유연하고 오류가 적은 코드를 작성할 수 있습니다. 이 섹션에서는 int()와 float() 함수를 이용한 기본 타입 변환을 설명합니다.
정수로 변환
숫자가 문자열 형태로 입력될 때, Python에서 수치 연산을 수행하려면 해당 문자열을 정수 또는 부동소수점 숫자로 변환해야 합니다. 예를 들어 문자열 "42"를 정수 42로 변환하려면 다음과 같이 int() 함수를 사용합니다.
str_number = "42"
int_number = int(str_number)
print(int_number) # Output: 42
이처럼 int() 함수를 사용하면 문자열을 정수로 변환할 수 있습니다. 변환이 성공하면 그 값은 숫자로 사용할 수 있습니다. "42.0"처럼 소수점이 포함된 문자열을 정수형으로 변환하려고 하면 오류가 발생한다는 점에 유의하세요. 정수 변환은 정수만 허용되며, 소수점이된 경우에는 float()를 사용해야 합니다.
부동소수점 숫자로 변환
부동소수점 숫자는 값의 소수 부분을 유지할 수 있는 타입입니다. Python에서는 float() 함수를 이용해 문자열을 부동소수점 숫자로 변환할 수 있습니다. 예를 들어 문자열 "3.14"를 부동소수점 숫자로 변환하려면 다음 코드를 사용합니다.
str_float = "3.14"
float_number = float(str_float)
print(float_number) # Output: 3.14
이처럼 float() 함수를 사용하면 문자열을 부동소수점 숫자로 변환할 수 있습니다. 또한 과학적 표기법 문자열도 float()로 변환이 가능하며, "1.23e-4"와 같은 표기도 지원됩니다.
str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp) # Output: 0.000123
숫자를 문자열로 변환
반대로, 숫자를 문자열로 변환해야 하는 경우도 많이 있습니다. 예를 들어 숫자를 다른 문자열과 결합해 화면에 표시하고 싶을 때가 그렇습니다. 이때는 str() 함수를 사용합니다.
num = 42
str_num = str(num)
print("Result of converting a number to a string: " + str_num) # Output: Result of converting a number to a string: 42
str() 함수는 숫자를 문자열로 변환해 주어, 숫자를 포함한 문자열을 자유롭게 다룰 수 있게 해 줍니다.
기본 타입 변환을 이해했다면, 이제 다른 진법 간 변환이나 전각 문자열 처리와 같은 고급 주제로 나아갈 수 있습니다.

3. 응용 예시: 여러 진법 및 전각 숫자 변환
Python의 기본 타입 변환을 이해했으니, 이제 더 고급 사례를 살펴보겠습니다. 이 섹션에서는 이진수, 16진수 등 다양한 진법으로 변환하는 방법과 전각 문자를 포함한 숫자를 처리하는 방법을 설명합니다.
이진수, 팔진수, 그리고 16진수 변환
Python의 int() 함수는 10진수뿐만 아니라 2진수, 8진수, 16진수 문자열도 변환할 수 있습니다. 이 경우 int() 함수의 두 번째 인수로 진법(base)을 지정합니다. 예를 들어, 2진수나 16진수 문자열을 정수로 변환하려면 다음과 같이 작성합니다.
binary_str = "1010" # binary string
octal_str = "12" # octal string
hex_str = "a" # hexadecimal string
int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)
print(int_binary) # Output: 10
print(int_octal) # Output: 10
print(int_hex) # Output: 10
따라서 int()에 적절한 진법을 지정하면 2진수, 8진수, 16진 문자열도 정수로 변환할 수 있습니다. 이 기능은 여러 진법이 혼합된 데이터를 다룰 때 특히 유용합니다.
전각 숫자 및 특수 문자 처리
사용자 입력 문자열에 전각 숫자나 특수 문자가 포함되어 있으면, 이를 Python에서 바로 변환하려고 하면 오류가 발생할 수 있습니다. 특히 일본어 숫자 입력에 전각 문자가 포함된 경우, Python이 이를 처리하지 못하는 경우가 많으므로 replace() 메서드를 사용해 전각 문자를 반각 문자로 변환하는 것이 권장됩니다.
다음은 전각 문자열을 반각으로 변환한 뒤 숫자로 변환하는 예시입니다.
str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))
print(int(str_num_halfwidth)) # Output: 12345
이 방법을 사용하면 전각 숫자 문자열을 숫자로 변환할 수 있습니다. 전각 소수점도 변환해야 하는 경우에는 다음과 같이 추가 변환을 수행할 수 있습니다.
str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))
print(float(str_float_halfwidth)) # Output: 123.456
한자 숫자 변환
Python에서는 Unicode 모듈을 이용해 일부 한자 숫자를 숫자로 변환할 수 있습니다. unicodedata.numeric()을 사용하면 “一”이나 “百”과 같은 문자열을 부동소수점 숫자로 변환할 수 있습니다.
import unicodedata
kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num) # Output: 5.0
하지만 여러 글자로 구성된 한자 숫자(예: “十五”)는 지원하지 않으므로, 보다 복잡한 처리가 필요할 경우 추가 라이브러리나 사용자 정의 정규식 처리를 고려해야 합니다.
이처럼 Python은 숫자 문자열에 대해서도 다양한 변환 방법을 제공합니다. 다음 섹션에서는 입력값이 변환 가능한지 판단하는 방법과 오류를 처리하는 방법을 자세히 설명합니다.
4. 오류 처리 및 입력 검증
데이터 처리 과정에서 사용자 입력 데이터나 외부에서 받은 데이터가 숫자로 올바르게 변환되지 못하는 경우가 있습니다. 따라서 데이터를 미리 숫자형으로 변환 가능한지 판단하고, 변환에 실패했을 때 적절히 오류를 처리하는 것이 중요합니다. 이 섹션에서는 입력 검증 및 오류 처리 방법을 설명합니다.
isdigit()와 정규식을 이용한 숫자 감지
문자열이 숫자로환지 미리 판단하는 한 가지 방법은 Python의 isdigit() 메서드나 정규식을 사용하는 것입니다. isdigit()는 문자열이 전부 숫자로만 이루어졌을 때 True를 반환하지만, 소수점이나 마이너스 기호가 포함되어 있으면 False를 반환합니다. 따라서 정수만을 확인하고자 할 때 유용합니다.
def is_integer(input_str):
return input_str.isdigit()
# Example usage
print(is_integer("123")) # Output: True
print(is_integer("3.14")) # Output: False
print(is_integer("-123")) # Output: False
반면, 부동소수점 숫자와 음수까지 포함한 숫자를 감지하려면 정규식이 편리합니다. 아래 예시에서는 “+” 또는 “-”가 앞에 붙은 숫자와 소수점을 포함한 값이 True를 반환하도록 설정했습니다.
import re
def is_numeric(input_str):
return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))
# Example usage
print(is_numeric("123")) # Output: True
print(is_numeric("-123.45")) # Output: True
print(is_numeric("3.14.15")) # Output: False
print(is_numeric("abc")) # Output: False
이와 같이 정규 표현식을 사용하면 값이 숫자인지 보다 유연하게 판단할 수 있어 복잡한 입력 데이터를 처리할 때 도움이 됩니다.
오류 처리: 예외 처리 사용
Python에서는 부적절한 데이터로 문자열을 숫자로 변환하면 오류(ValueError)가 발생합니다. 이 오류를 잡고 처리를 계속하려면 try-except 블록을 사용하여 예외 처리를 하는 것이 일반적입니다.
아래 예시에서는 문자열을 정수로 변환하려다 오류가 발생하면 적절한 오류 메시지가 표시됩니다.
def convert_to_int(input_str):
try:
return int(input_str)
except ValueError:
print(f"Error: '{input_str}' cannot be converted to an integer.")
return None
# Example usage
print(convert_to_int("123")) # Output: 123
print(convert_to_int("abc")) # Output: Error: 'abc' cannot be converted to an integer.
예외 처리를 추가하면 오류가 발생해도 프로그램이 중단되지 않고 원활하게 실행될 수 있습니다. 또한 사용자에게 명확한 피드백을 제공하여 입력수를 쉽게 수정할 수 있게 합니다.
입력 데이터 검증과 오류 처리를 적절히 수행하면 코드의 신뢰성이 향상됩니다. 다음 섹션에서는 리스트 요소를 일괄 변환하는 방법을 살펴보겠습니다. 
5. 리스트 요소 일괄 변환 방법
데이터를 처리할 때 문자열 형태로 저장된 리스트 요소를 한 번에 숫자로 변환해야 할 경우가 있습니다. 예를 들어 CSV 파일이나 외부에서 가져온 데이터는 종종 문자열로 저장됩니다. 이 섹션에서는 Python 리스트 컴프리헨션을 활용한 일괄 변환 방법을 소개합니다.
리스트 컴프리헨션을 이용한 일괄 변환
Python에서는 각 리스트 요소를 루프로 처리하는 것 외에도 리스트 컴프리헨션을 사용해 데이터를 간결하고 효율적으로 변환할 수 있습니다. 리스트 컴프리헨션은 리스트의 각 요소에 특정 연산을 적용하고 새로운 리스트를 생성합니다.
예를 들어, 숫자 문자열을 포함한 리스트를 정수 리스트로 변환하려면 다음 코드를 사용합니다.
str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]
print(int_list) # Output: [10, 20, 30, 40, 50]
이 예시에서 리스트 컴프리헨션 [int(i) for i in str_list]은 str_list의 각 요소를 int() 함수를 사용해 정수로 변환하여 새로운 리스트 int_list를 생성합니다. 이 방법은 간결한 코드로 대규모 데이터 처리를 가능하게 하여 코드 가독성과 성능을 향상시킵니다.
오류 처리를 포함한 일괄 리스트 변환
리스트에 변환할 수 없는 데이터(예: 문자열이나 특수 문자)가 포함되어 있으면 오류가 발생합니다. 이 경우 조건문이나 예외 처리를 리스트 컴프리헨션에 포함시켜 변환 오류를 방지할 수 있습니다. 아래는 정수로 변환 가능한 요소만 변환하는 예시입니다.
str_list = ["10", "20", "abc", "30", "40"]
int_list = []
for i in str_list:
try:
int_list.append(int(i))
except ValueError:
print(f"Warning: '{i}' could not be converted to an integer.")
print(int_list) # Output: [10, 20, 30, 40]
이 코드에서는 try-except 블록을 사용해 문자열을 정수로 변환하고, 변환에 실패하면 오류 메시지를 표시합니다. append() 메서드를 이용해 변환 가능한 요소만 int_list에 추가함으로써 오류가 발생해도 처리를 계속 진행하고 변환 결과를 얻을 수 있습니다.
일괄 리스트 변환은 대량 데이터를 처리할 때 매우 유용한 기술입니다. 다음 섹션에서는 전체 내용을 요약하고 배운 내용을 정리하겠습니다.
6. 요약
이 기사에서 우리는 Python에서 문자열과 숫자 간 변환 방법을 설명했으며, 기본부터 고급 주제까지 다루었습니다. 데이터 처리에서 타입 변환의 중요성을 이해하고 효율적으로 수행하는 방법을 알면 Python 프로그래밍에서 수행할 수 있는 작업 범위가 확장됩니다. 아래는 각 섹션의 간단한 요약입니다.
기사 요약
- 소개
- 문자열과 숫자 간 변환 필요 상황을 설명하고, 수치 계산과 데이터 표시에서 타입 변환의 중요성을 보여주었습니다.
- Python의 기본 타입 변환
int(),float(), 그리고str()함수를 사용하여 문자열과 숫자 간 데이터 타입을 변경하는 기본 변환 방법을 배웠습니다.
- 고급 예제: 다양한 진법과 전각 숫자의 변환
- 이진수, 팔진수, 십육진수를 정수로 변환하는 방법과 숫자 처리 위해 전각 문자를 반각으로 변환하는 방법을 소개했습니다. 또한
unicodedata.numeric()을 사용하여 한자 숫자를 숫자로 변환하는 방법을 설명했습니다.
- 오류 처리와 입력 검증
- 숫자 변환 중 오류가 발생할 수 있음을 고려하여
isdigit()과 정규 표현식을 사용하여 값이 숫자인지 사전 검증하는 방법과try-except를 사용한 예외 처리로 오류를 처리하는 방법을 보여주었습니다.
- 리스트 요소를 대량 변환하는 방법
- 리스트 컴프리헨션을 사용하여 대량 변환을 수행하는 방법, 발생할 수 있는 오류 처리 방법, 그리고 대량의 데이터를 효율적으로 처리하는 기술을 배웠습니다.
미래 적용
Python의 타입 변환은 거의 모든 데이터 처리와 기본 프로그래밍 작업에 관여합니다. 실제 개발에서 적절한 타입 변환과 오류 처리를 일관되게 적용함으로써 버그를 줄이고 더 높은 품질의 코드를 작성할 수 있습니다. 게다가 여기서 배운 기본 변환 방법을 기반으로 더 고급 데이터 변환 기술을 익히면 복잡한 데이터 처리를 효율적으로 처리할 수 있습니다. 이 기사가 Python의 타입 변환에 필요한 지식과 기술에 대한 포괄적인 이해를 제공해주기를 바랍니다. 배운 것을 미래 프로그래밍 프로젝트에 적용하세요.



