应优先使用 isinstance() 进行类型检查,因其支持继承和协议,而 type() 仅严格匹配类;处理转换时需明确合法输入、报错条件与降级策略,避免掩盖错误信号。

用 isinstance() 做类型检查,别信 type()
Python 的鸭子类型让很多转换逻辑看起来能跑通,但实际运行时突然报 AttributeError 或 TypeError——问题常出在“以为是某种类型,其实只是长得像”。type() 严格匹配类对象,无法识别子类或协议实现;而 isinstance() 支持继承链和 __instancecheck__,更贴近真实使用意图。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 对输入做校验时,优先用
isinstance(x, (str, bytes))而非type(x) == str - 处理自定义类时,如果它实现了类似
__len__和__iter__,考虑用collections.abc.Iterable替代硬判list或tuple - 注意
None是个常见漏网之鱼:isinstance(None, type(None))成立,但多数转换函数不接受它,需单独判断
字符串转数字时,int() 和 float() 的容错边界在哪
直接调 int("12.3") 会报 ValueError,但 float("12.3") 能过——这不是 bug,是设计:Python 明确区分整数解析(要求纯数字字符)和浮点解析(允许小数点、科学计数法)。更隐蔽的问题是空白符和 Unicode 数字。
实操建议:
立即学习“Python免费学习笔记(深入)”;
-
int()不处理空白以外的任何字符,哪怕" 42 "都要先.strip() -
float()可解析"inf"、"nan",但下游计算可能崩,必要时用math.isfinite()过滤 - Unicode 全角数字(如
"123")会被int()拒绝,需先用unicodedata.normalize("NFKC", s)转换
JSON 序列化前,datetime 和 Decimal 怎么安全转成 JSON 友好类型
标准 json.dumps() 直接炸:遇到 datetime 报 TypeError: Object of type datetime is not JSON serializable,Decimal 同理。这不是配置问题,是 JSON 规范本身不支持这些类型,必须显式转换。
完全公开源代码,并无任何许可限制 特别基于大型电子商务网站的系统开发 Microsoft SQL Server 2000后台数据库,充分应用了存储过程的巨大功效 基于类模块的扩展数据访问能力支持任何类型的大型数据库 加密用户登录信息(cookie) 易于安装的系统和应用功能 100%的asp.net的代码,没有COM,java或者其他的格式 完全基于MS建议的系统安全设计 最佳的应用程序,数据库
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 不要重写整个
JSONEncoder类,除非需要统一策略;临时转换用default参数更轻量:json.dumps(obj, default=str)可兜底大多数可读类型(但str(datetime)格式不标准) - 对
datetime,明确用.isoformat()或.strftime("%Y-%m-%d %H:%M:%S"),避免依赖str()的隐式行为 -
Decimal必须转float或str:转float有精度丢失风险(如Decimal("0.1") → 0.10000000000000000555),金融场景务必转str
用 pandas.to_numeric() 处理混合类型列,errors="coerce" 的副作用
当 CSV 或 Excel 里一列本该是数字,却混了 "N/A"、"–"、空格甚至中文,to_numeric() 默认直接报错。设 errors="coerce" 确实能转成 NaN,但代价是:所有无法解析的值都变成 np.nan,你再也分不清是原始缺失,还是脏数据被抹平了。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 先用
pd.api.types.is_string_dtype()确认列类型,再决定是否强转 - 用
errors="raise"+try/except捕获首次报错,打印出问题值定位源头,比盲目coerce更可靠 - 若必须用
coerce,之后立刻检查df[col].isna().sum()占比,异常高说明原始数据质量差,该修上游而不是靠 pandas 掩盖
类型安全不是加一堆 isinstance 就完事,而是清楚每个转换环节里,什么值算“合法输入”、什么值算“该报错”、什么值算“可以降级处理”。最容易被忽略的是:你以为的“安全兜底”,其实悄悄吞掉了关键错误信号。









