如何对kwargs中的整数、整数列表做类型检查并转换为字符串?
错误原因
- 原写法
if args == list是将变量值直接和list类型对象做相等判断,而非判断变量的类型是否为列表,该条件永远不成立,因此所有值都会走else分支,直接把列表整体转为字符串存入结果。 - 修改为
if args != int时,是判断变量值是否不等于int类型对象,无论变量是列表还是整数,该条件都会成立,因此整数也会进入遍历逻辑,触发'int' is not iterable报错。
正确实现方案
Python中判断变量类型推荐使用isinstance()方法,也可以用type()做严格类型匹配,修改后的代码如下:
kwargs = {'foo': [1, 2], 'bar': 2, 'baz': 3} new_list = [] for kw, args in kwargs.items(): # 判断args是否为list类型 if isinstance(args, list): for arg in args: new_list.append(str(arg)) else: new_list.append(str(args)) print(new_list) # 输出结果:['1', '2', '2', '3']
如果需要严格匹配类型、不考虑子类继承场景,也可以将判断条件替换为if type(args) is list,效果一致。
内容的提问来源于stack exchange,提问作者Kwaku RBG
相关产品推荐
相关产品推荐

