Python调用comput()报缺少必填位置参数r、h错误如何解决
报错根因
你现在碰到的报错是两个代码写法问题叠加导致的:
- 自定义模块
program5_1_module末尾多写了一行无参调用comput()。Python在导入模块时,会从上到下执行模块里所有写在顶层的代码,你主程序刚执行import program5_1_module这行,就会自动跑这行comput(),但你定义的comput函数明确要求传入r、h两个位置参数,无参调用直接就触发了你看到的TypeError: comput() missing 2 required positional arguments: 'r' and 'h'报错,这是当前报错的直接诱因。 - 就算你删掉了这行多余的调用,主程序还会触发第二个错误:你用
import 模块名的方式导入时,模块内的函数属于模块独立命名空间,直接在主程序里写comput(rate, hours)会报NameError,找不到这个函数。另外你在pay()函数里把计算得到的薪资变量也命名为pay,和函数名重名,虽然不会立刻报错,但属于容易出问题的坏写法。
修正方案
按下面的步骤改就能正常运行:
- 第一步:删掉
program5_1_module文件末尾多余的comput()调用。如果需要在模块文件里写自测代码,一定要放到if __name__ == '__main__':代码块里,这样只有直接运行这个模块文件时才会执行自测逻辑,被其他文件导入时不会触发。 - 第二步:修正主程序里
comput函数的调用方式,要么在调用时加上模块名前缀,要么调整导入语句直接把函数导入当前命名空间。 - 可选优化:把
pay()函数里存薪资的变量改个名字,不要和函数同名;主程序的入口逻辑也放到if __name__ == '__main__':块里,避免被其他文件导入时自动执行。
修正后完整代码
模块文件 program5_1_module.py
def comput(r, h): if h <= 40: p = r * h else: p = r * 40 + (r * 1.5 * (h - 40)) return p # 模块内自测代码,被导入时不会执行 if __name__ == '__main__': # 可以在这里写测试逻辑,比如测试计算45小时时薪20的薪资: # print(comput(20, 45)) pass
主程序文件
import program5_1_module def main(): pay() pay() pay() def pay(): name = input('Enter employee name: ') rate = float(input(f'Enter hourly rate for {name}: ')) hours = float(input(f'Enter hours for {name} this week: ')) # 加模块前缀调用函数,同时修改变量名避免和函数重名 total_pay = program5_1_module.comput(rate, hours) print(f'Pay for {name} is ${total_pay:,.2f}') if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者jarvis_801
相关产品推荐
相关产品推荐

