使用模块操作系统和系统在python中的索引错误



我得到了一个练习,以显示目录中文件的名称,并在路径不存在时阻止它崩溃。 这是我的代码:

import sys
import os
PATH = 1

def main():
try:
os.path.exists(sys.argv[PATH])
except os.error and sys.stderr:
print "Error - no such path"
directory = sys.argv[PATH]
print os.listdir(directory)

if __name__ == '__main__':
main()

我不断收到错误消息,指出我的列表索引超出范围。我该怎么办?.

另外,我是python的新手,所以请不要走得太远。

我做了一些更改来捕获所有异常并针对 python 3 重新格式化。

  • 将所有可能出错的命令移至 try 块
  • 将异常处理程序更改为每个 python 3 错误建议的BaseException
  • 为索引错误添加了处理程序
  • 添加了有关捕获的异常的更多打印信息

我希望这有所帮助。

import sys
import os
PATH = 1
def main():
try:
os.path.exists(sys.argv[PATH])
directory = sys.argv[PATH]
print(os.listdir(directory))
except BaseException as base_error:
print("Error - no such path --> ", base_error)
except IndexError as index_error:
print("Path is not an index --> ", index_error)
if __name__ == '__main__':
main()

sys.argv本质上与C的argv相似。第一个元素(位于索引 0 处(是被调用脚本的名称。其余元素(包括您尝试访问的元素(是您传递给脚本的元素。例如,假设您的代码位于名为 test.py 的文件中,并在 shell 中执行:

test.py abc

那么sys.argv[1]abc.你有PATH = 1,所以你正在尝试访问sys.argv数组的第二个元素。如果你只做test.py,那么索引将在sys.argv数组上越界。

您还有其他一些问题(例如尝试捕获不是异常的事情(,所以我不确定您是如何到达索引错误的。如果将无效except os.error and sys.stderr:替换为except:,则脚本将抛出索引错误,如果将其调用为test.py而不是类似test.py path/to/the/file.txt的内容。

最新更新