IndexError:使用 glob()、rsplit() 列出超出范围的索引

问题描述

我正在尝试执行一个给我一个 IndexError 的 python 脚本。我知道 rsplit() 方法未能拆分字符串。我不完全知道为什么它显示索引超出范围。谁能告诉我如何解决这个问题?

代码

raw_directory = 'results/'
for name in glob.glob(raw_directory + '*.x*'):
        try:
                #with open(name) as g:
                #       pass
                print(name)
        reaction_mechanism = 'gri30.xml' #'mech.cti'
        gas = ct.solution(reaction_mechanism)
        f = ct.CounterflowDiffusionFlame(gas,width=1.)
        name_only = name.rsplit('\\',1)[1] #delete directory in filename
        file_name = name_only
        f.restore(filename=raw_directory + file_name,name='diff1D',loglevel=0)

输出

如果我删除文件strain_loop_07.xml,另一个文件也会出现同样的错误

results/strain_loop_07.xml
Traceback (most recent call last):
   File "code.py",line 38,in <module>
     name_only = name.rsplit('\\'1)[1] #delete directory in filename
IndexError: list index out of range

解决方法

如果 rsplit 未能拆分字符串,则返回一个只有一个解的数组,因此 [0] 而不是 [1]

我在这篇文章的回复中了解到“name”变量填充了类似“result/strain_loop_07.xml”的文本,所以你想对它进行分割,用一行更像

name_only = name.rsplit('/',1)[1]

所以你会得到“strain_loop_07.xml”元素,这可能是你想要的,因为 name.resplit('/',1) 返回类似

['result','strain_loop_07.xml']

顺便说一句,不要犹豫,在中途打印您的变量以进行调试,这通常是要做的事情,以了解您的变量在特定时间的状态。就在你们分手之前!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...