【问题标题】:A split function with two arguments returns error带有两个参数的拆分函数返回错误
【发布时间】:2019-08-05 15:55:54
【问题描述】:

我尝试在 python 中编写一个非常简单的代码,因为如果我们有两个参数,我不明白line.split 是如何工作的。但是,此代码返回错误,我也不明白line.split 的用途。你能帮帮我吗?

from operator import itemgetter
import sys

word = None
count = 0
line= 'foo     1' \
      ''

line = line.strip()
try:
    word, count = line.split('\t', 1)
except:
    print('error')

count = int(count)
print(word, count)

【问题讨论】:

  • 如果您使用自己的自定义消息屏蔽错误消息(使用try 和裸except),您将如何看到实际错误?
  • @Austin 我得到一个值错误,没有足够的值来解压
  • 我知道。我告诉过你不应该那样使用except

标签: python split tabs delimiter


【解决方案1】:

Split 返回一个基于您传递的分隔符拆分的字符串列表。

'hey, you'.split(',') 返回['hey', ' you'],如果您提供两个变量,则可以将其解包。

如果您要拆分的字符串拆分为一个包含两个以上值的列表,那么您将收到错误ValueError: too many values to unpack

在您的情况下,只需检查split 的输出是什么,它可能是一个仅包含一个元素foo 1 的列表,无法解包。

【讨论】:

    【解决方案2】:

    line.split('\t') 只返回一个值,而 word, count 您期望两个值,因此会导致错误:ValueError: not enough values to unpack (expected 2, got 1)

    如果您将该行更改为 word, count = line.split() 而在 split 函数中没有任何参数,则默认情况下它将在任何空白处进行拆分,并正确返回您期望的两个值而不会出现错误。

    【讨论】:

    • 对不起,line.split('\t', 1) 在我的代码中,我不小心删除了 ,1 部分。
    • @MaryPoppins 好的,在这种情况下并没有什么不同。 line.split('\t', 1) 仍然只返回一个值。
    • error None 0 如果我用 line.split() 替换,这就是代码返回的内容。但是,我应该怎么做才能使用 '\t' 作为分隔符并返回单词值(第一个)和计数值(第二个)?
    • 我刚刚做了替换并运行它,它返回foo 1。您的代码还有其他问题。
    【解决方案3】:

    究竟返回了什么错误信息?如果是由line.split('\t') 行引起的ValueError,则可能意味着该字符串实际上不包含制表符,而是包含多个空格。如果要在制表符或空格上拆分字符串,请省略参数:line.split()

    【讨论】:

    • 那么你的字符串不包含一个实际的制表符('\t'),所以没有什么可以拆分的,所以结果列表只包含一个值(不是两个),就像以前一样由几个答案指出。
    【解决方案4】:

    简单,,, source

    result = your_string.split(separator, max)
    

    分隔符 可选。 指定分割字符串时使用的分隔符。 默认值是空格 ma​​x 可选。 指定要进行多少次拆分。 默认值为-1,即“所有出现”


    python string split 将给定的字符串用指定的分隔符分隔后返回一个字符串列表。

    所以你不能拥有word, count = line.split('\t', 1)

    只需使用words= line.split('\t')

    【讨论】:

    • 我使用了一个程序来获得灵感,该程序正好有单词 count = line.split('\t', 1) 并且效果很好。它有一个像我一样来自 sys.stdin 的多行文本,对于 line in (那个输入),它完全执行这种操作并且它可以工作。你知道为什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2023-04-04
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多