Python3.6 Split()没有足够的值来解包解决方法?

2024-09-30 18:30:51 发布

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

当我试图拆分一个单词时,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>)"

所以有了这个代码,我可以输入'!帮助ships的Slack和cast no error并返回getAllShips()函数。但如果我简单地输入'!帮助”,Python抛出一个错误。在

我基本上希望能够返回一个没有修饰符的语句。但是,没有修饰符会导致错误。我还能做些什么来解决这个问题吗?有人能给我指出正确的方向吗?在


Tags: textnameif错误helpassetslackreply
3条回答

解决方案是确保序列中始终至少有两个项目(通过在末尾添加一些内容),然后将序列的前两个项目切片。在

例如:

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

或者:

^{pr2}$

(这里变量_以任何额外的项目结束)

当然,你也可以用传统的方式来做:

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

为什么不先搜索空白,然后处理分割?在

if ' ' in slack_text

<;您的代码>

在Python中有一个概念“请求原谅比请求许可更好”。换言之,只要尝试一下你认为可能有效的方法,然后如果它不起作用,就从中恢复过来,而不是一开始就检查它是否可行。例如,尝试访问不存在的列表索引,而不是先检查列表的长度。关于这一点还有很多争论,例如here等等。在

这里最简单的例子是:

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

把所有的错误都忽略掉不是一个好主意。虽然您正在从失败中恢复,但您事先知道可能会出现什么问题,因此您应该捕捉到特定的错误。在

相关问题 更多 >