杰瑞科技汇

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() 函数会尝试将字符串解析成一个十进制整数。
  • 字符串必须只包含数字(可以包含一个可选的正负号 或 在开头)。

常见错误及原因

如果你尝试转换一个不符合格式的字符串,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() 进行截断取整(注意:这不是四舍五入)。

Python中string转int的具体方法有哪些?-图2
(图片来源网络,侵删)
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 开头,并且只包含 01

Python中string转int的具体方法有哪些?-图3
(图片来源网络,侵删)
binary_str = "1101"  # 这是二进制表示,等于十进制的 13
# base=2 表示这是一个二进制字符串
num = int(binary_str, base=2)
print(f"二进制 '{binary_str}' 转换为十进制是: {num}")
# 输出:
# 二进制 '1101' 转换为十进制是: 13

示例:转换八进制字符串

八进制以 0o 开头,并且包含 07 的数字。

octal_str = "17"  # 这是八进制表示,等于十进制的 15
# base=8 表示这是一个八进制字符串
num = int(octal_str, base=8)
print(f"八进制 '{octal_str}' 转换为十进制是: {num}")
# 输出:
# 八进制 '17' 转换为十进制是: 15

示例:转换十六进制字符串

十六进制以 0x 开头,并且包含 09 以及 af (不区分大小写)。

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 错误处理模式就足够应对大部分情况了。

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