Type Conversion in Python
What is Type Conversion?
Type conversion (also called type casting) is the process of converting a value from one data type to another. Python supports two kinds: implicit and explicit.
Implicit Type Conversion
Python automatically converts types when it's safe to do so — no data is lost. This usually happens when mixing int and float.
x = 5 # int
y = 2.5 # float
result = x + y
print(result) # 7.5
print(type(result)) # <class 'float'> — Python promoted int to float
# bool is a subclass of int
print(True + 1) # 2
print(False + 5) # 5
print(True * 10) # 10
Explicit Type Conversion (Type Casting)
You manually convert using built-in functions. This is called explicit conversion or type casting.
| Function | Converts To | Example |
|---|---|---|
int(x) | Integer | int("42") → 42 |
float(x) | Float | float("3.14") → 3.14 |
str(x) | String | str(100) → "100" |
bool(x) | Boolean | bool(0) → False |
list(x) | List | list("abc") → ['a','b','c'] |
tuple(x) | Tuple | tuple([1,2,3]) → (1,2,3) |
set(x) | Set | set([1,2,2,3]) → {1,2,3} |
dict(x) | Dictionary | dict(a=1, b=2) |
complex(r, i) | Complex | complex(2, 3) → (2+3j) |
ord(c) | Integer (Unicode) | ord('A') → 65 |
chr(n) | Character | chr(65) → 'A' |
hex(n) | Hex string | hex(255) → '0xff' |
oct(n) | Octal string | oct(8) → '0o10' |
bin(n) | Binary string | bin(10) → '0b1010' |
# int conversions
print(int(3.9)) # 3 (truncates, doesn't round)
print(int("42")) # 42
print(int("0b1010", 2)) # 10 (binary string to int)
print(int("0xFF", 16)) # 255 (hex string to int)
# float conversions
print(float(5)) # 5.0
print(float("3.14")) # 3.14
# str conversions
print(str(100)) # "100"
print(str(3.14)) # "3.14"
print(str(True)) # "True"
# bool — falsy values
print(bool(0)) # False
print(bool("")) # False
print(bool([])) # False
print(bool(None)) # False
print(bool(1)) # True
print(bool("hi")) # True
# list / tuple / set
print(list("Python")) # ['P', 'y', 't', 'h', 'o', 'n']
print(tuple([1, 2, 3])) # (1, 2, 3)
print(set([1, 2, 2, 3, 3])) # {1, 2, 3}
# ord and chr
print(ord('A')) # 65
print(chr(65)) # 'A'
print(ord('a')) # 97
Common Conversion Pitfalls
# int() truncates, doesn't round
print(int(9.9)) # 9 (not 10!)
print(int(-3.7)) # -3 (not -4!)
# Use round() if you need rounding
print(round(9.9)) # 10
print(round(3.567, 2)) # 3.57
# ValueError — invalid conversion
try:
x = int("hello")
except ValueError as e:
print(f"Error: {e}") # invalid literal for int()
# Safe conversion pattern
def safe_int(value, default=0):
try:
return int(value)
except (ValueError, TypeError):
return default
print(safe_int("42")) # 42
print(safe_int("abc")) # 0
print(safe_int(None)) # 0
# User input is always a string — always convert!
age_str = input("Enter age: ") # returns str
age = int(age_str) # convert to int