Python 3.6 Split()没有足够的值来解包?

gtlvzcf8  于 2023-01-14  发布在  Python
关注(0)|答案(3)|浏览(465)

在Python中,当我试图拆分一个单词时,总是会遇到错误,据我所知,这是因为默认的split()命令会寻找空格,问题是,我希望第二个赋值变量(在本例中为asset)返回nothing或null,这就是我正在使用的方法:

slack_text.startswith("!help"):
command, asset = slack_text.split() 
    if asset != "":
        if asset == "commandlist":
            slack_reply = "Available Commands: !addme, !getBalance, !buy <asset> <quantity>"
        elif asset == "ships":
            slack_reply = getAllShips()
        elif asset == "buildings":
            slack_reply = getAllBuildings()
        elif shipExists(asset):
                        slack_reply = getShip(asset)
        elif buildingExists(asset):
             slack_reply = getBuilding(asset)
        else:
             slack_reply = "Not a valid asset."
    else:
        slack_reply = "Available help modifiers are: commandlist, <ship_name>, <building_name>. (!help <modifier>)"

因此,在这段代码中,我可以在Slack中输入'!help ships',并且不会强制转换错误,然后返回getAllShips()函数,但是如果我只输入'!help',Python就会强制转换错误。
我基本上希望在没有修饰符的情况下能够返回一个语句。然而,没有修饰符会引发错误。我还能做些什么来解决这个问题吗?有人能给我指出正确的方向吗?

ne5o7dgx

ne5o7dgx1#

一种解决方案是确保序列中至少有两个项目(通过在末尾添加一些内容),然后对序列的前两个项目进行切片。
例如:

command, asset = (slack_text.split() + [None])[:2]

或:

command, asset, *_ = slack_text.split() + [None]

(here变量_以任何额外项结束)
当然,你也可以用传统的方法:

command = slack_text.split()[:2]
 if len(command) > 1:
     command, asset = command
 else:
     command, asset = command[0], None
mrfwxfqh

mrfwxfqh2#

在Python中有一个“请求原谅比请求许可更好”的概念。换句话说,只要尝试你认为可能有效的方法,然后在无效时恢复,而不是一开始就检查它是否有效。一个例子是尝试访问一个不存在的列表索引。而不是先检查列表的长度。关于这会走多远,还有很多争论,例如here
这里最简单的例子是:

command = '!help'
split_string = command.split()
try:
    modifiers = split_string[1]
except IndexError: # Well, seems it didn't work
    modifiers = None

仅仅覆盖except所有错误不是一个好主意,尽管您正在从故障中恢复,但您事先知道这里可能会出现什么错误,因此您应该捕获该 * 特定 * 错误。

uinbv5nw

uinbv5nw3#

为什么不先搜索空白,然后再处理拆分呢?
if ' ' in slack_text
〈您的代码〉

相关问题