Python TypeError求助:mock_input_output_start参数不匹配问题
修复硬币兑换程序的TypeError问题
这个TypeError并非你的硬币兑换业务代码本身的问题,而是测试时使用的模拟(mock)函数参数定义不匹配导致的。报错信息里的mock_input_output_start.<locals>.<lambda>()提示你在模拟print或input时,定义的lambda函数只接受1个参数,但实际代码调用时传递了多个参数。
修正后的业务代码
你的核心兑换逻辑是正确的,仅需调整几处细节(拼写错误、错误提示准确性、用户输入兼容性):
def coin_calc(change): quarters = change // 25 change = change % 25 dimes = change // 10 change = change % 10 nickels = change // 5 change = change % 5 pennies = change return quarters, dimes, nickels, pennies while True: change = input("Enter change amount to convert: ") if str(change).isnumeric(): change = int(change) if change < 100: quarters, dimes, nickels, pennies = coin_calc(change) print(quarters, "quarter(s)") print(dimes, "dime(s)") print(nickels, "nickel(s)") # 修正拼写错误:nickle → nickel print(pennies, "penny" if pennies == 1 else "pennies") # 优化单复数显示 print("Want to calculate another amount? (y/n): ", end="") answer = input() if answer.lower() == "n": # 兼容小写n输入 print("Bye!") break else: print("Error! Amount must be less than 100, please try again.") else: print("Error! Invalid integer entered, please try again.")
修复测试时的TypeError
根据报错信息,问题出在你的测试代码中对print或input的模拟:
- 如果是模拟
print函数:
代码中多次调用print(a, b)(传递2个参数),但你定义的mock lambda只接受1个参数。需要改成支持任意数量参数的形式:# 错误写法(仅接受1个参数) mock_print = lambda x: None # 正确写法(接受任意数量参数) mock_print = lambda *args: None - 如果是模拟
input函数:input可以接受1个可选的prompt参数(比如input("Enter...")),如果你的mock lambda强制要求1个参数,但代码中存在input()(无参数调用),也会触发参数不匹配。改成支持可选参数的形式:# 错误写法(强制要求1个参数) mock_input = lambda prompt: "50" # 正确写法(支持无参数调用) mock_input = lambda prompt=None: "50"
内容的提问来源于stack exchange,提问作者Ty Kenyon
相关产品推荐
相关产品推荐

