Python类型转换需明确目标类型、确保可转换并处理异常;内置函数如int()、str()等依赖对象是否实现对应协议;隐式转换仅限数值运算,字符串与数字绝不自动转换;自定义类需实现__int__等特殊方法;不可靠输入应加try/except及数据清洗。

Python类型转换的核心是明确目标类型、确保数据可转换,并处理可能的异常。直接强制转换失败时会抛出异常,不能忽略数据语义和精度损失。
常用内置转换函数及适用场景
Python提供int()、float()、str()、bool()、list()、dict()等基础转换函数。它们不是万能的,依赖输入对象是否实现了对应的协议(如__int__、__str__)。
-
数字转字符串:用
str(42)或f"{42}",安全且无副作用 -
字符串转数字:需确认内容格式,
int("123")可行,但int("12.3")报错,应先转float再转int(注意截断) -
容器类型转换:如
list("abc")得['a','b','c'],dict([(1,'a'),(2,'b')])要求输入为键值对序列
隐式转换仅发生在特定运算中
Python极少自动做类型提升,仅在部分算术运算中体现:比如3 + 4.0结果为7.0(int→float),但"1" + 2直接报TypeError,不会尝试转成字符串。
- 混合数值类型(
int、float、complex)参与运算时,按精度从低到高自动转为统一类型 - 字符串与数字之间绝不隐式转换,必须显式调用
str()或int()等 - 布尔值在数值上下文中可当
0/1用(如True + 2 → 3),但这属于“布尔是整数子类”的特性,不是通用转换规则
自定义对象的类型转换支持
若想让自定义类支持int(obj)或str(obj),需在类中实现对应特殊方法:
立即学习“Python免费学习笔记(深入)”;
-
__int__(self):返回整数,用于int(obj) -
__float__(self):返回浮点数,用于float(obj) -
__str__(self):返回用户友好的字符串表示,用于str(obj)和print(obj) -
__repr__(self):返回开发者友好的调试字符串,不参与常规类型转换
未实现对应方法时,调用会抛出TypeError,例如未定义__int__却执行int(my_obj)。
处理不可靠输入的安全转换建议
从用户输入、文件读取或API响应中获取的数据往往格式不确定,直接转换风险高。推荐封装健壮的解析逻辑:
- 用
try/except捕获ValueError(字符串转数字失败)、TypeError(类型不支持) - 对空字符串、
None、空白符提前判断,避免传入空值触发异常 - 数值转换前可用
.strip().replace(',', '')清洗常见干扰字符(注意区域格式差异) - 考虑使用
ast.literal_eval()安全解析简单字面量(如"[1,2,3]"→列表),比eval()安全得多










