Python 中如何把字符串解析成整数或浮点数?

Python 字符串转数字:int('42') 转整数、float('3.14') 转浮点。非法输入抛 ValueError,需 try/except 容错。本文介绍转换方法及常见坑。

最佳实践
Python 中如何把字符串解析成整数或浮点数?封面

转整数用 int('42'),转浮点用 float('3.14')。字符串必须是合法数字形式,否则抛 ValueError,处理用户输入时记得 try/except。

基本转换

int('42')       # 42
float('3.14')   # 3.14
float('42')     # 42.0

容错处理

import math

def to_number(s, default=0):
    if not isinstance(s, str):
        return default
    try:
        return int(s)
    except ValueError:
        try:
            value = float(s)
            return value if math.isfinite(value) else default
        except ValueError:
            return default

print(to_number('42'))     # 42
print(to_number('3.14'))   # 3.14
print(to_number('abc'))    # 0

常见坑

int('3.14')      # ValueError!int 不能直接转小数字符串
int(float('3.14'))  # 3——向零截断;大整数经float可能丢精度

int('  42  ')    # 42——首尾空白自动忽略
int('42px')      # ValueError——带单位不行

int('1,000')     # ValueError——需先验证千分位格式,不能任意删除逗号
int('1,000'.replace(',', ''))  # 1000

进制转换

int('ff', 16)    # 255(十六进制)
int('0b101', 2)  # 5(二进制)
int('777', 8)    # 511(八进制)

常见问题(FAQ)

Q:如何判断字符串能否转数字?
A:isdigit/isnumeric 是Unicode字符分类,不等同于int/float可解析;某些数字字符无法转换,而符号、小数或指数可能被分类方法拒绝。按所需语法直接转换并捕获异常,再验证范围和有限值。

Q:科学计数字符串?
A:float('1e5') 得到 100000.0,float 支持;int 不支持。

Q:精度要求高(金额)?
A:用 Decimal('3.14'),避免 float 的二进制浮点误差。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台