杰瑞科技汇

Python string 转 int 有哪些方法?

基础用法

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

Python string 转 int 有哪些方法?-图1
(图片来源网络,侵删)
# 定义一个字符串
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() 无法直接处理。

Python string 转 int 有哪些方法?-图2
(图片来源网络,侵删)
# 错误示例
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() 方法将其移除。

Python string 转 int 有哪些方法?-图3
(图片来源网络,侵删)
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() 等字符串处理方法会变得非常有用。

分享:
扫描分享到社交APP
上一篇
下一篇