如何解决lambda函数中出现的「字符串格式化时未转换所有参数」TypeError问题
报错原因
input()返回的内容默认是字符串类型,经过split(' ')拆分后得到的列表a中所有元素都是字符串格式,不是整数。- 当lambda函数中执行
x%2逻辑时,因为x是字符串,Python会将%识别为字符串格式化运算符,而非数值取模运算符,字符串格式化时参数数量不匹配就触发了该TypeError。
修复方法
只需要在拆分输入后,将列表内的所有元素转换为整数类型即可,可选增加输入合法性校验避免用户输入非数字内容时报错。
修正后完整代码
def even_odd_lambda(list_object): odd_ctr = len(list(filter(lambda x: (x%2 != 0) , list_object))) even_ctr = len(list(filter(lambda x: (x%2 == 0) , list_object))) return [odd_ctr, even_ctr] if __name__ == '__main__': # 拆分输入后转为整数列表 a = list(map(int, input("Add list elements seperated by space ").split(' '))) output = even_odd_lambda(a) print("\nNumber of even numbers in the above array: ", output[1]) print("\nNumber of odd numbers in the above array: ", output[0])
如果需要兼容非数字输入的场景,可以加异常捕获:
if __name__ == '__main__': try: input_content = input("Add list elements seperated by space ").split(' ') a = list(map(int, input_content)) output = even_odd_lambda(a) print("\nNumber of even numbers in the above array: ", output[1]) print("\nNumber of odd numbers in the above array: ", output[0]) except ValueError: print("输入包含非数字内容,请重新输入")
内容的提问来源于stack exchange,提问作者Nikhil Bante
相关产品推荐
相关产品推荐

