扩展列表时列表索引超出范围

用户10918383

此函数将电子邮件正文作为输入,并分别在应用程序名称、来源和消息后返回值,并且工作正常

def parse_subject(line):
    info = {}
    segments = line.split(' ')

    info['time'] = segments[0]+' '+segments[1]
    for i in range(2, len(segments)):
        key = ''
        if segments[i] == 'Application name:':
            key = 'appname'
        elif segments[i] == 'Source:':
            key = 'source'
        elif segments[i] == 'Message:':
            key = 'message'
        if key != '':
            i += 1
            info[key] = segments[i]
    return info

对于另一种电子邮件正文格式,我需要扩展段格式,因为我需要在邮件正文中搜索更多行,所以我更改了 info['time'],一旦我将段扩展到 2 以上,我就会出现超出范围的错误

info['time'] = segments[0]+' '+segments[1]+' '+segments[2]+' '+segments[3]+' '+segments[4]+' '+segments[5]......up to segment[17]

也许我需要扩展更多

及以上功能失败 list index out of range

我更改了代码但同样的错误:

还尝试更改数字以匹配段数,但相同:

for i in range(<number of segments>, len(segments)):

段示例:长度会有所不同,因为 Message 之后的字符串具有不同的值,有时是 URL 字符串

问题

当我定义段的长度时,让我们说段 [17],

我需要改变的功能不抛出 out of index error

def parse_subject(line):
    info = {}
    segments = line.split(' ')

    info['time'] = segments[0]+' '+segments[1] + ' ' + segments[2] + ' ' + segments[3] + ' ' + segments[4] + ' ' + segments[5] + ' ' + segments[6] + ' ' + segments[7] + ' ' + segments[8] +' ' + segments[9] + ' ' + segments[10] + ' ' + segments[11] + ' '  + segments[12] +' ' + segments[13] + ' ' + segments[14] + ' ' 
+ segments[15] +' ' + segments[16] + ' ' + segments[17]

    for i in range(16, len(segments)):
        key = ''
        if segments[i] == 'name:':
            key = 'appname'
        elif segments[i] == 'Source:':
            key = 'source'
        elif segments[i] == 'Message:':
            key = 'message'
        if key != '':
            i += 1
            info[key] = segments[i]
    return info




        if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
            body = get_autosys_body(mail)

        # print(body)
        for line in body.splitlines():
            if 'Application Name' in line:
                job_info = parse_subject(line)
                break

        print(job_info)

我需要传递行变量(下面的内容)

 name:Contoso.Service
 Source: host15
 Timestamp: 2019-01-22T00:00:43.901Z
 Message:null

parse_subject(line)功能和从上面的输出可以得到:

Contoso.Service作为价值job_info['appname'] host15作为价值jobinfo['source']

null 作为价值 jobinfo['message']

肯尼·奥斯特罗姆

在您的代码中,您需要调试它。错误告诉你究竟出了什么问题。

def old_parse_subject(line):
    info = {}
    segments = line.split(' ')
    if len(segments < 18):
        raise ValueError("segments[17] won't work if segments is not that long")

您可以在知道错误所在的位置之前执行 print(len(segments)) 或仅打印 (segments) 。

对于阅读电子邮件标题,如果您知道它有多行,则使用 split('\n') 获得那些,然后对于每一行,如果您知道它是“名称:值”,则使用 split(':', 1)。

split 的第二个参数表示只拆分 1 个冒号,因为任何额外的冒号都可以作为数据的一部分。例如,时间戳有冒号。

def parse_subject(headers):
    info = {}
    # split the full header into separate lines
    for line in headers.split('\n'):
        # split on colon, but only once
        key, value = line.split(':', 1)
        # store info
        info[key] = value
    return info

data = """name:Contoso.Service
Source: host15
Timestamp: 2019-01-22T00:00:43.901Z
Message:null"""

print (parse_subject(data))

{'name':'Contoso.Service','Source':'host15','Timestamp':'2019-01-22T00:00:43.901Z','Message':'null'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表索引超出范围

来自分类Dev

列表索引超出范围

来自分类Dev

列表-索引超出范围

来自分类Dev

列表索引超出范围

来自分类Dev

列表索引超出范围

来自分类Dev

当列表索引超出范围时环绕列表

来自分类Dev

当列表索引超出范围时在列表上换行

来自分类Dev

索引和列表 - 索引超出范围

来自分类Dev

使用count时收到“ IndexError:列表索引超出范围”

来自分类Dev

IndexError:使用元组时列表索引超出范围

来自分类Dev

与字典比较时,列表索引超出范围

来自分类Dev

索引超出范围时如何再次遍历列表

来自分类Dev

IndexError:删除重复项时列表索引超出范围

来自分类Dev

比较文件时出错:IndexError:列表索引超出范围

来自分类Dev

传递空值时列表索引超出范围

来自分类Dev

Python循环:列表索引超出范围

来自分类Dev

列表索引超出范围,使用split()

来自分类Dev

IndexError:列表索引超出范围

来自分类Dev

RDD问题-列表索引超出范围

来自分类Dev

错误:列表索引超出范围

来自分类Dev

(Python)列表索引超出范围-迭代

来自分类Dev

Python:XML列表索引超出范围

来自分类Dev

Ultimatelistctrl:列表索引超出范围

来自分类Dev

lndexError:列表索引超出范围

来自分类Dev

Django:列表索引超出范围

来自分类Dev

Python列表索引超出范围-算法

来自分类Dev

列表索引超出范围:Python:

来自分类Dev

出现“列表索引超出范围”错误

来自分类Dev

列表中的索引超出范围