杰瑞科技汇

Python字符串如何转整数?

下面我将从基础用法、常见错误处理、进阶用法以及不同场景下的最佳实践等多个方面进行详细说明。

基础用法

int() 函数可以将一个表示整数的字符串直接转换为整数。

# 定义一个字符串
str_num = "123"
# 使用 int() 函数进行转换
num = int(str_num)
# 检查类型
print(f"原始字符串: '{str_num}', 类型: {type(str_num)}")
print(f"转换后数字: {num}, 类型: {type(num)}")
# 输出结果:
# 原始字符串: '123', 类型: <class 'str'>
# 转换后数字: 123, 类型: <class 'int'>

处理不同进制

int() 函数的第二个可选参数 base 用于指定字符串的进制,默认是 10(十进制)。

# 二进制字符串 (以 '0b' 开头是可选的,但推荐加上)
str_bin = "1010"
num_bin = int(str_bin, 2)
print(f"二进制 '{str_bin}' 转换为十进制: {num_bin}") # 输出: 10
# 八进制字符串 (以 '0o' 开头是可选的)
str_oct = "12"
num_oct = int(str_oct, 8)
print(f"八进制 '{str_oct}' 转换为十进制: {num_oct}") # 输出: 10
# 十六进制字符串 (以 '0x' 开头是可选的)
str_hex = "A"
num_hex = int(str_hex, 16)
print(f"十六进制 '{str_hex}' 转换为十进制: {num_hex}") # 输出: 10
# 十进制字符串
str_dec = "10"
num_dec = int(str_dec, 10)
print(f"十进制 '{str_dec}' 转换为十进制: {num_dec}") # 输出: 10

注意:

  • 当指定 base 时,字符串中不应包含表示进制的 0b, 0o, 0x 前缀,否则会报 ValueError
  • base 的范围必须是 036base=0 是一个特殊情况,它会根据字符串的前缀自动判断进制(如 0x 代表十六进制,0b 代表二进制等)。
# base=0 的自动识别
print(int("0xA", 0))  # 输出: 10 (自动识别为十六进制)
print(int("0b1010", 0)) # 输出: 10 (自动识别为二进制)
print(int("10", 0))   # 输出: 10 (默认为十进制)

错误处理

如果字符串的内容不是一个有效的整数(例如包含字母、空格、小数点等),int() 函数会抛出 ValueError 异常,在实际应用中,你必须处理这种异常。

# 无效的字符串
invalid_str = "hello world"
try:
    num = int(invalid_str)
except ValueError:
    print(f"错误: 无法将字符串 '{invalid_str}' 转换为整数。")
# 输出:
# 错误: 无法将字符串 'hello world' 转换为整数。

带空格的字符串

如果字符串前后有空格,int() 会自动忽略它们并成功转换,但如果字符串中间有空格,则会报错。

# 前后有空格,可以转换
str_with_spaces = "  42  "
num = int(str_with_spaces)
print(f"'{str_with_spaces}' 转换为: {num}") # 输出: 42
# 中间有空格,会报错
str_with_middle_space = "42 56"
try:
    num = int(str_with_middle_space)
except ValueError:
    print(f"错误: 无法将字符串 '{str_with_middle_space}' 转换为整数。")

处理带正负号的字符串

int() 可以正确处理带有 或 号的字符串。

str_positive = "+99"
str_negative = "-99"
num_pos = int(str_positive)
num_neg = int(str_negative)
print(f"'{str_positive}' 转换为: {num_pos}") # 输出: 99
print(f"'{str_negative}' 转换为: {num_neg}") # 输出: -99

从浮点数字符串转换

如果字符串表示的是一个浮点数(包含小数点),直接使用 int() 会报错。

float_str = "123.45"
try:
    num = int(float_str)
except ValueError:
    print(f"错误: 无法直接将浮点数字符串 '{float_str}' 转换为整数。")
# 正确的做法是先转换为 float,再转换为 int (这会截断小数部分)
float_num = float(float_str)
int_num = int(float_num) # 这会截断小数部分,而不是四舍五入
print(f"先转 float 再转 int: {int_num}") # 输出: 123

重要提示: int() 在转换浮点数时是截断小数部分,而不是四舍五入,如果你需要四舍五入,应该使用 round() 函数。

str_for_rounding = "123.67"
# 先转 float
float_val = float(str_for_rounding)
# 使用 round() 进行四舍五入
rounded_num = round(float_val)
print(f"四舍五入后的结果: {rounded_num}") # 输出: 124
# 再转 int
final_int = int(rounded_num)
print(f"最终整数: {final_int}") # 输出: 124

最佳实践:创建一个安全的转换函数

在实际开发中,你经常会需要将用户输入或其他外部来源的字符串转换为整数,为了避免程序因无效输入而崩溃,最佳实践是创建一个封装了错误处理的函数。

def safe_str_to_int(s):
    """
    安全地将字符串转换为整数。
    如果转换失败,返回 None。
    """
    try:
        return int(s)
    except (ValueError, TypeError): # 同时处理无效值和类型错误(如传入 None)
        return None
# --- 测试 ---
# 成功案例
print(safe_str_to_int("100"))   # 输出: 100
print(safe_str_to_int("-50"))  # 输出: -50
print(safe_str_to_int("  200  ")) # 输出: 200
# 失败案例
print(safe_str_to_int("abc"))   # 输出: None
print(safe_str_to_int("12.34")) # 输出: None
print(safe_str_to_int(""))      # 输出: None
print(safe_str_to_int(None))    # 输出: None
场景 方法 示例 注意事项
基本转换 (十进制) int() int("123") 字符串必须是纯数字,不能有空格或字母。
不同进制转换 int(s, base) int("A", 16) base 指定进制,字符串不应包含 0x 等前缀。
处理无效输入 try-except try: ... except ValueError: 必须使用,否则程序会因无效输入而崩溃。
处理带空格的字符串 int() 自动处理 int(" 42 ") 只能处理前后空格,不能处理中间空格。
处理正负号 int() 自动处理 int("+99") 和 号会被正确识别。
从浮点数字符串转换 float()int() int(float("123.45")) int()截断小数,不是四舍五入。
健壮的转换函数 封装 try-except def safe_str_to_int(s): ... 推荐在实际项目中使用,返回 None 或默认值。

你就可以在 Python 中灵活、安全地处理字符串到整数的转换了。

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