我得到了一个练习,以显示目录中文件的名称,并在路径不存在时阻止它崩溃。 这是我的代码:
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
的内容。