基础用法
最基本的方式就是直接将字符串作为参数传递给 int() 函数。

(图片来源网络,侵删)
# 定义一个字符串
str_num = "123"
# 使用 int() 函数进行转换
num = int(str_num)
# 查看类型和值
print(f"转换后的值: {num}")
print(f"转换后的类型: {type(num)}")
# 输出:
# 转换后的值: 123
# 转换后的类型: <class 'int'>
核心要点:
int()函数会尝试将字符串解析成一个十进制整数。- 字符串必须只包含数字(可以包含一个可选的正负号 或 在开头)。
常见错误及原因
如果你尝试转换一个不符合格式的字符串,int() 函数会抛出 ValueError 异常。
错误示例 1:字符串中包含非数字字符
str_with_alpha = "123abc"
try:
num = int(str_with_alpha)
except ValueError as e:
print(f"转换失败: {e}")
# 输出:
# 转换失败: invalid literal for int() with base 10: '123abc'
错误示例 2:字符串是浮点数格式
如果你想直接转换 "123.45",同样会失败,因为小数点 不是有效的整数字符。
str_float = "123.45"
try:
num = int(str_float)
except ValueError as e:
print(f"转换失败: {e}")
# 输出:
# 转换失败: invalid literal for int() with base 10: '123.45'
正确做法: 先用 float() 转成浮点数,再用 int() 进行截断取整(注意:这不是四舍五入)。

(图片来源网络,侵删)
str_float = "123.45" float_num = float(str_float) # 先转成浮点数 123.45 int_num = int(float_num) # 再截断取整,得到 123 print(int_num) # 输出: 123
错误示例 3:字符串包含空格
如果字符串前后有空格,直接转换也会失败。
str_with_space = " 123 "
try:
num = int(str_with_space)
except ValueError as e:
print(f"转换失败: {e}")
# 输出:
# 转换失败: invalid literal for int() with base 10: ' 123 '
正确做法: 在转换前使用字符串的 .strip() 方法去除首尾空格。
str_with_space = " 123 " clean_str = str_with_space.strip() # 得到 "123" num = int(clean_str) print(num) # 输出: 123
进阶用法:处理不同进制的字符串
int() 函数的第二个可选参数 base 用于指定字符串的进制,如果提供了 base,字符串必须按照该进制的格式来写。
示例:转换二进制字符串
二进制以 0b 开头,并且只包含 0 和 1。

(图片来源网络,侵删)
binary_str = "1101" # 这是二进制表示,等于十进制的 13
# base=2 表示这是一个二进制字符串
num = int(binary_str, base=2)
print(f"二进制 '{binary_str}' 转换为十进制是: {num}")
# 输出:
# 二进制 '1101' 转换为十进制是: 13
示例:转换八进制字符串
八进制以 0o 开头,并且包含 0 到 7 的数字。
octal_str = "17" # 这是八进制表示,等于十进制的 15
# base=8 表示这是一个八进制字符串
num = int(octal_str, base=8)
print(f"八进制 '{octal_str}' 转换为十进制是: {num}")
# 输出:
# 八进制 '17' 转换为十进制是: 15
示例:转换十六进制字符串
十六进制以 0x 开头,并且包含 0 到 9 以及 a 到 f (不区分大小写)。
hex_str = "FF" # 这是十六进制表示,等于十进制的 255
# base=16 表示这是一个十六进制字符串
num = int(hex_str, base=16)
print(f"十六进制 '{hex_str}' 转换为十进制是: {num}")
# 输出:
# 十六进制 'FF' 转换为十进制是: 255
完整的最佳实践(健壮的转换函数)
在实际开发中,我们通常需要处理各种可能出错的输入,一个健壮的转换函数应该能够处理空值、非数字字符串、前后空格等情况。
def safe_str_to_int(s):
"""
一个安全的字符串转整数函数。
如果转换成功,返回整数;如果失败,返回 None。
"""
if not isinstance(s, str) or not s.strip():
# 如果输入不是字符串,或者字符串为空/全是空格,则返回 None
return None
try:
# 尝试直接转换十进制
return int(s)
except ValueError:
try:
# 如果失败,尝试转换带小数点的字符串(先转float再转int)
return int(float(s))
except ValueError:
# 如果还是失败,说明字符串确实无法转换,返回 None
return None
# --- 测试 ---
print(f"'123' -> {safe_str_to_int('123')}") # 输出: 123
print(f"'-456' -> {safe_str_to_int('-456')}") # 输出: -456
print(f"' 789 ' -> {safe_str_to_int(' 789 ')}") # 输出: 789
print(f"'12.34' -> {safe_str_to_int('12.34')}") # 输出: 12
print(f"'abc' -> {safe_str_to_int('abc')}") # 输出: None
print(f"'123abc' -> {safe_str_to_int('123abc')}") # 输出: None
print(f"'' -> {safe_str_to_int('')}") # 输出: None
print(f"' ' -> {safe_str_to_int(' ')}") # 输出: None
print(f"None -> {safe_str_to_int(None)}") # 输出: None
| 场景 | 方法 | 示例 |
|---|---|---|
| 标准十进制整数 | int(s) |
int("123") -> 123 |
| 处理前后空格 | int(s.strip()) |
int(" 123 ".strip()) -> 123 |
| 处理浮点数字符串 | int(float(s)) |
int(float("12.34")) -> 12 (截断) |
| 转换二进制 | int(s, 2) |
int("1101", 2) -> 13 |
| 转换八进制 | int(s, 8) |
int("17", 8) -> 15 |
| 转换十六进制 | int(s, 16) |
int("FF", 16) -> 255 |
| 安全转换 | 使用 try-except 封装 |
参考上面的 safe_str_to_int 函数 |
对于初学者来说,int() 的基本用法和 try-except 错误处理模式就足够应对大部分情况了。
