Python导入自定义子函数触发IndexError索引越界问题咨询
报错根因
你遇到的IndexError: list index out of range和函数导入是否正确无关,问题出在file_with_function.py的代码结构错误:
- 读取
sys.argv的代码放在了模块顶层,没有缩进进if __name__ == '__main__'判断块内 - 执行
from file_with_function import function时,Python会优先运行被导入文件的所有顶层代码,此时你运行主脚本没有传入额外命令行参数,sys.argv仅包含1个元素(当前脚本路径),调用sys.argv[1]自然触发索引越界 - 你写的
if __name__ == '__main__'块缩进错误,目前被包含在function函数定义内部,直接运行该文件时也不会正常触发
代码修复方案
首先修正file_with_function.py的代码结构:
import sys def function(roll = 15 , pitch = 30 , yaw = 45): # 此处编写函数逻辑 return output1, output2, output3 # 多返回值需要显式return if __name__ =='__main__': # 仅直接运行该文件时才会执行以下命令行参数读取逻辑 print('Argument List: '+ str(sys.argv)) rolla = int(sys.argv[1]) pitcha = int(sys.argv[2]) yawa = int(sys.argv[3]) function(roll = rolla, pitch = pitcha, yaw = yawa)
其次修正主脚本的调用语法,Python多返回值赋值无需加方括号:
from file_with_function import function output1, output2, output3 = function(roll = 15, pitch = 30, yaw = 45)
函数导入校验方法
如果需要确认函数是否被正确导入,可使用以下方式验证:
- 导入后直接打印函数对象:
print(function),输出为<function function at 内存地址>格式则导入成功,报NameError则导入失败 - 打印函数参数列表验证:导入inspect模块后执行
print(inspect.signature(function)),输出参数和你定义的一致则没问题 - 调用默认参数版本测试:执行
res = function(),无报错且返回值符合预期则导入正常
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

