当我运行这段代码时:
def main():
maze = []
maze_1d_arr = open(sys.argv[0], 'r')
maze_read = maze_1d_arr.readline()
maze_split = maze_read.split(" ")
size_X = int(maze_split[0])
size_Y = int(maze_split[1])
maze_grid = int(maze_split[2:])
maze = np.array(maze_grid).reshape(size_X, size_Y)
start = np.where(maze_split == 2)
end = np.where(maze_split == 3)
path = astar(maze, start, end)
print(path)
我得到了这个错误;
size_X = int(maze_split[0])
ValueError: invalid literal for int() with base 10: 'import'
有没有办法解决这个问题?它来自一个文本文件,其中包含以下一行:
6 4 0 0 1 0 0 0 2 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 3 0
作为文件的一些背景知识,第一个数字应该表示x轴,第二个数字应该表示y轴,第三个数字向前是网格。
非常感谢:)
编辑:我已将代码更改为:
def main():
maze = []
maze_1d_arr = open(sys.argv[1], 'r')
maze_read = maze_1d_arr.readline()
maze_split = maze_read.split(" ")
size_X = [int (X) for X in maze_split[0]]
size_Y = [int (Y) for Y in maze_split[1]]
maze_grid = [int (x) for x in maze_split[2:]]
maze = np.array(maze_grid).reshape(size_X, size_Y)
start = np.where(maze_split == 2)
end = np.where(maze_split == 3)
path = astar(maze, start, end)
print(path)
但我现在得到了这个错误,
size_Y = [int (Y) for Y in maze_split[1]]
IndexError: list index out of range
我仍然使用和以前一样的代码文件,有什么办法解决这个问题吗?
发布于 2021-01-07 20:18:21
此错误源于您没有使用来自sys.argv
的正确参数:第一个元素(索引0)是程序的名称,而不是传递给程序的第一个参数。
因此,open(sys.argv[0], 'r')
行将打开程序的源代码(而不是预期的数据文件)。因此,您尝试解析的第一个单词是Python关键字import
,它不是一个有效的整数。
解决方案是用sys.argv[1]
替换sys.argv[0]
,这应该是正确的参数。有关sys.argv
的详细信息,请参阅https://docs.python.org/3/library/sys.html#sys.argv。
提醒一下可能会有帮助:传统上,Unix程序在打印帮助消息时使用它们的名称;为此,它们需要知道调用它们的名称,这是命令行上的第一个参数,即sys.argv[0]
。只要您记住这一点,就应该记住sys.argv[1]
是程序的第一个参数。
祝您在使用Python的旅途中好运!
https://stackoverflow.com/questions/65612098
复制相似问题