Python索引器错误:循环/While循环的列表索引超出范围

2024-05-18 08:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根绳子:

string="R$ 35.0123. "

我想清理一下,把最后一个点和最后的那个空间去掉。让它看起来像这样:

^{pr2}$

我试着用这个:

while string[-1].isdigit()==False:
      string=string[:-1]

但是我得到了这个错误:

IndexError: list index out of range

奇怪的是,我在for循环中运行这个,如果循环列表只有一个项,那么它可以正常工作。如果列表有两项,则会出现此问题。在

有什么想法吗? 祝你们圣诞快乐。在

下面的完整代码 (字符串是变量“valor”)

if CNPJ in page:
    CNPJloc=[]
    for i in (re.finditer(CNPJ,page)):
        CNPJloc.append(i.start())

    for i in CNPJloc:
        CNPJposition=i
        beg_string=["aviao"]
        end_string="sicon"
        for i in beg_string:
            if i in lower_page[CNPJposition-200:]:
                beg_string=i                
                extrato_de_contrato=page[lower_page.rfind(beg_string,0,CNPJposition):lower_page.find(end_string,CNPJposition)]
                lower_extrato=extrato_de_contrato.lower()
                def valor():
                    valor=["valor do contrato:","valor:"]
                    for i in valor:
                        if i in lower_extrato:
                            valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))]
                        while valor[-1].isdigit()==False:
                            valor=valor[:-1]
                    print("Valor Total: ", valor)
                    return valor
                valor()

Tags: inforstringifpagedelowervalor
3条回答

Python有内置的功能来实现rstrip

string.rstrip('. ')

输出

^{pr2}$

听起来你只需要删除最后一个点和之后的一切。使用正则表达式

import re
re.sub('(\.[^.]*)$', '', string)

我发现了问题。。。好的旧缩进误差:

而不是:

            def valor():
                valor=["valor do contrato:","valor:"]
                for i in valor:
                    if i in lower_extrato:
                        valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))]
                    while valor[-1].isdigit()==False:
                        valor=valor[:-1]

应该是这样的:

^{pr2}$

您可能遇到的字符串不符合您的格式,并且不包含数字。在

尝试通过添加len(x) > 0指示符来保护循环:

while len(string) > 0 and not string[-1].isdigit():
     del string[-1]

如果您只想从字符串中提取整数,我建议使用regex:

^{pr2}$

相关问题 更多 >