Python3 数据类型转换¶
概念与用途¶
类型转换把输入数据变成计算所需形式。Python 通常不隐式混合字符串和数字,因此命令行、文件或网络输入需要显式校验后转换。
核心 API¶
常用构造器有 int(x, base)、float()、str()、bool()、list()、tuple()、set() 和 dict()。bytes.decode() 与 str.encode() 在字节和文本间转换。
raw = ["42", "0xff", "3.5"]
count = int(raw[0])
color = int(raw[1], 16)
ratio = float(raw[2])
payload = "你好".encode("utf-8")
print(count, color, ratio, payload.decode("utf-8"))
转换规则¶
| 来源 | 目标 | 推荐处理 |
|---|---|---|
| 用户文本 | 数字 | 捕获 ValueError 并检查范围 |
| 文本 | 字节 | 明确 encode("utf-8") |
| 字节 | 文本 | 协议指定编码后 decode() |
| 可迭代对象 | list/set | 注意是否消耗生成器 |
示例:带校验的布尔转换¶
def parse_bool(text: str) -> bool:
normalized = text.strip().casefold()
if normalized in {"1", "true", "yes"}:
return True
if normalized in {"0", "false", "no"}:
return False
raise ValueError(f"无效布尔值: {text!r}")
print(parse_bool("YES"), parse_bool("0"))
不要用 bool(user_text) 解析配置,因为除空字符串外都为真。转换函数应把格式验证和业务范围验证分开,使错误消息能够指出具体问题。
常见错误与工程注意¶
int("3.5")会抛出ValueError,是否允许小数应由业务规则决定。- 解码时应明确编码;随意使用
errors="ignore"会静默丢失数据。 - 转换外部输入应捕获具体异常并给出可操作的错误信息。