基础用法
最基本的使用方法是将一个表示整数的字符串作为参数传递给 int() 函数。

# 定义一个字符串
str_num = "123"
# 使用 int() 函数进行转换
num = int(str_num)
# 检查类型
print(f"转换后的值: {num}")
print(f"转换后的类型: {type(num)}")
# 输出:
# 转换后的值: 123
# 转换后的类型: <class 'int'>
核心要点:
int()函数会尝试将字符串解析为一个十进制整数。- 字符串中只能包含数字(
0-9),不能包含任何其他字符(如空格、字母、逗号等),否则会抛出ValueError。
常见错误及处理
当字符串的格式不正确时,int() 函数会抛出 ValueError 异常,了解这些错误并学会处理它们非常重要。
错误 1:字符串包含非数字字符
# 错误示例 invalid_str = "12a3" # num = int(invalid_str) # 这行代码会抛出 ValueError
错误 2:字符串为空
# 错误示例 empty_str = "" # num = int(empty_str) # 这行代码会抛出 ValueError
错误 3:字符串包含空格
int() 函数不允许字符串开头或结尾有空格。
# 错误示例 space_str = " 123 " # num = int(space_str) # 这行代码会抛出 ValueError
错误 4:字符串包含逗号(千位分隔符)
在表示大数字时,人们常会用逗号分隔,但 int() 无法直接处理。

# 错误示例 comma_str = "1,000,000" # num = int(comma_str) # 这行代码会抛出 ValueError
如何处理错误:try-except 结构
在实际应用中,你不能假设输入总是有效的,使用 try-except 结构来优雅地处理这些错误是最佳实践。
def str_to_int(s):
try:
return int(s)
except ValueError:
# 如果转换失败,可以返回一个默认值(如 0 或 None)
# 或者打印一条错误信息
print(f"错误: 无法将字符串 '{s}' 转换为整数。")
return 0 # 或者 return None
# 测试用例
print(f"'123' -> {str_to_int('123')}")
print(f"'-456' -> {str_to_int('-456')}")
print(f"' 789 ' -> {str_to_int(' 789 ')}") # 这个会失败,因为 int() 不处理前后空格
print(f"'abc' -> {str_to_int('abc')}")
print(f"'1,000' -> {str_to_int('1,000')}")
# 输出:
# '123' -> 123
# '-456' -> -456
# 错误: 无法将字符串 ' 789 ' 转换为整数。
# ' 789 ' -> 0
# 错误: 无法将字符串 'abc' 转换为整数。
# 'abc' -> 0
# 错误: 无法将字符串 '1,000' 转换为整数。
# '1,000' -> 0
进阶用法
int() 函数还有一些可选参数,可以处理更复杂的情况。
a. 处理前后空格
int() 函数本身不处理字符串两端的空格,如果你需要处理这种情况,可以在转换前使用 strip() 方法。
space_str = " 987 "
# int(space_str) # 会报错
# 使用 strip() 移除空格后再转换
num = int(space_str.strip())
print(f"转换后的值: {num}") # 输出: 987
b. 处理千位分隔符(逗号)
如果字符串中包含逗号作为千位分隔符,你需要先使用 replace() 方法将其移除。

comma_str = "1,000,000"
# int(comma_str) # 会报错
# 使用 replace() 移除逗号后再转换
num = int(comma_str.replace(',', ''))
print(f"转换后的值: {num}") # 输出: 1000000
c. 处理其他进制(二进制、八进制、十六进制)
int() 函数的第二个参数 base 用于指定字符串所表示的进制。
语法: int(x, base=10)
- 二进制 (base=2): 字符串以
'0b'开头 - 八进制 (base=8): 字符串以
'0o'开头 - 十六进制 (base=16): 字符串以
'0x'开头
# 二进制
bin_str = "0b1010" # 对应十进制的 10
num_bin = int(bin_str, 2)
print(f"二进制 '0b1010' 转换为十进制: {num_bin}") # 输出: 10
# 八进制
oct_str = "0o12" # 对应十进制的 10
num_oct = int(oct_str, 8)
print(f"八进制 '0o12' 转换为十进制: {num_oct}") # 输出: 10
# 十六进制
hex_str = "0xA" # 对应十进制的 10
num_hex = int(hex_str, 16)
print(f"十六进制 '0xA' 转换为十进制: {num_hex}") # 输出: 10
# 也可以不带前缀,但必须配合 base 参数
num_hex_2 = int("A", 16)
print(f"十六进制 'A' 转换为十进制: {num_hex_2}") # 输出: 10
完整的最佳实践示例
下面是一个综合了上述所有技巧的健壮函数,它可以处理带空格、带逗号、带正负号的字符串。
def robust_str_to_int(s):
"""
将一个字符串安全地转换为整数。
可以处理前后空格、千位分隔符(逗号)和正负号。
如果转换失败,返回 None。
"""
if not isinstance(s, str):
return None # 输入不是字符串,直接返回 None
# 1. 移除字符串两端的空格
s_stripped = s.strip()
if not s_stripped: # 如果移除空格后字符串为空
return None
# 2. 移除千位分隔符(逗号)
s_no_commas = s_stripped.replace(',', '')
# 3. 尝试转换
try:
return int(s_no_commas)
except ValueError:
# 如果仍然失败,说明字符串包含非数字字符
return None
# --- 测试 ---
print(f"' 123 ' -> {robust_str_to_int(' 123 ')}") # 输出: 123
print(f"'+456' -> {robust_str_to_int('+456')}") # 输出: 456
print(f"'-78,900' -> {robust_str_to_int('-78,900')}") # 输出: -78900
print(f"' 1,000,000 ' -> {robust_str_to_int(' 1,000,000 ')}") # 输出: 1000000
print(f"'abc' -> {robust_str_to_int('abc')}") # 输出: None
print(f"'' -> {robust_str_to_int('')}") # 输出: None
print(f"123 -> {robust_str_to_int(123)}") # 输出: None (因为输入不是字符串)
| 需求场景 | 解决方案 | 示例 |
|---|---|---|
| 基本转换 | 直接使用 int() |
int("123") |
| 处理空格 | 先用 strip() |
int(" 123 ".strip()) |
| 处理逗号 | 先用 replace() |
int("1,000".replace(',', '')) |
| 处理负数 | int() 自动支持 |
int("-456") |
| 处理不同进制 | 使用 int(s, base) |
int("0b1010", 2) |
| 安全转换 | 使用 try-except 结构 |
见上面的最佳实践示例 |
对于初学者来说,int() 函数和 try-except 结构是核心,随着你经验的增长,strip(), replace() 等字符串处理方法会变得非常有用。
