Python函数参数不匹配引发类型错误问题排查与解决
解决
trip_cost函数参数顺序导致的类型错误问题 问题根源
你最初定义的trip_cost函数参数顺序是(days, city),但调用时传入的是trip_cost('Pittsburgh', 8)——这直接导致参数分配完全错位:
- 字符串
'Pittsburgh'被错误赋值给了第一个参数days - 数字
8被错误赋值给了第二个参数city
这会引发两个关键问题:
- 调用
hotel_cost(days)时,days是字符串类型,140 * 'Pittsburgh'会生成一个重复140次的字符串(而非预期的数字成本) - 调用
plane_ride_cost(city)时,city是数字8,不在函数的城市判断分支里,因此函数默认返回None
当你尝试把字符串和None相加时,就触发了错误:cannot concatenate 'str' and 'NoneType' objects
解决方法
调整trip_cost的参数顺序,让调用时的传参逻辑和函数定义匹配:将参数顺序改为(city, days),这样调用trip_cost('Pittsburgh', 8)时,城市字符串和天数数字就能被正确分配到对应的参数上,各个子函数都能返回合法的数值进行相加。
完整正确代码
def hotel_cost(nights): return 140 * nights def plane_ride_cost(city): if city == "Charlotte": return 183 elif city == "Tampa": return 220 elif city == "Pittsburgh": return 222 elif city == "Los Angeles": return 475 def rental_car_cost(days): cost = days * 40 if days >= 7: cost -= 50 elif days >= 3: cost -= 20 return cost def trip_cost(city, days): return hotel_cost(days) + plane_ride_cost(city) + rental_car_cost(days) # 正常调用示例 print(trip_cost('Pittsburgh', 8)) # 输出对应的旅行总成本
内容的提问来源于stack exchange,提问作者Diganto M. Paul
相关产品推荐
相关产品推荐

