key,value-如何处理null-python



我的数据如下:

To: abc@gmail.com;def@gmail.com
CC: abc@hotmail.com;def@hotmail.com
BCC:

我正在做一个键值分割,如下所示。

key, value = line.split(": ")

问题是,它无法处理BCC的零值。我得到以下错误

ValueError: not enough values to unpack (expected 2, got 1)

我想知道在使用键值分割时处理null的最佳方法是什么?

如果事先不知道其大小,则应在执行拆包之前检查其大小。

data = """To: abc@gmail.com;def@gmail.com
CC: abc@hotmail.com;def@hotmail.com
BCC:"""
for line in data.split("n"):
result = line.split(": ")
if len(result) == 2:
[key, value] = result
print(key, value)
else:
print("No emails found.")

打印

To abc@gmail.com;def@gmail.com
CC abc@hotmail.com;def@hotmail.com
No emails found.

使用str.partition()而不是str.split()。它总是返回分隔符前的文本、分隔符和分隔符后的文本的三元组。如果找不到分隔符,则不会引发错误,但整个原始字符串位于第一项中,第二项和第三项为空字符串。

key, _, value = line.partition(": ")
if not value:    # separator was not found
print("no emails found")

请使用内置的电子邮件解析器

from email.parser import Parser
p = Parser()
data = """To: abc@gmail.com;def@gmail.com
CC: abc@hotmail.com;def@hotmail.com
BCC:"""
parsed = p.parsestr(data)
bcc = [e for e in parsed.get('BCC').strip().split(';') if not len(e) == 0]
print(
'To:', parsed['To'].split(';'),
'nCC:', parsed['CC'].split(';'),
'nBCC', 'None' if not bcc else bcc
)

当代码找不到您在split中传递的字符串时,它会返回一个包含一个项的数组。这就是为什么它不能打开两个值的包装。

固定代码:

split_line = line.split(": ")
if len(split_line) > 1:
key, value = line.split(": ")

最新更新