使用 maxsplit 的 split() 问题
Issue with split() using maxsplit
我确定这是非常基本的问题,我正在尝试设置 !status 命令来更改我的机器人的状态。以下代码有效:
@myBot.event
async def on_message(message):
if message.content.startswith('!status'):
m = message.content.split(' ')
await myBot.change_presence(game=discord.Game(name=m[1]))
所以这里没什么复杂的,它会将机器人的状态设置为我在 !status
之后键入的任何内容。
但是,它会在第一个 space 之后停止,因为我 m[1]
没有 maxsplit
。现在,如果我将 maxsplit=1
添加到我的 split()
函数,我可以获得 m[1]
中第一个 space 之后的所有内容。这看起来很完美,对吧?假设我只是输入了和以前一样的东西,比如 !status test
,令人惊讶的是,它不起作用,即使 m[1]
只包含 test
,状态也没有更新。为什么? maxsplit=1
真正改变了什么我用 print(m[1])
看不到的?
如果没有 maxplit
,第一个空格之后就没有所有内容,那么 m[1]
just 包含第一个和第二个空格之间的所有内容(如果存在) ).
只有一个空格,它们是相同的:
>>> str1 = '!status test'
>>> str1.split()
['!status', 'test']
>>> str1.split(maxsplit=1)
['!status', 'test']
但如果有多个则不是:
>>> str2 = '!status test debug'
>>> str2.split() # 3 elements
['!status', 'test', 'debug']
>>> str2.split(maxsplit=1) # 2 elements
['!status', 'test debug']
我想你真正想要的是去掉 !status
:
>>> str1[len('!status '):] # or hardcode the length: `[8:]`
'test'
>>> str2[len('!status '):]
'test debug'
或者更简单 str.partition
:
>>> str1 = '!status test'
>>> str2 = '!status test debug'
>>> str1.partition(' ')
('!status', ' ', 'test')
>>> str2.partition(' ')
('!status', ' ', 'test debug')
第三个元素总是包含第一个空格之后的所有内容。您甚至可以检查第一个元素 == '!status'
我确定这是非常基本的问题,我正在尝试设置 !status 命令来更改我的机器人的状态。以下代码有效:
@myBot.event
async def on_message(message):
if message.content.startswith('!status'):
m = message.content.split(' ')
await myBot.change_presence(game=discord.Game(name=m[1]))
所以这里没什么复杂的,它会将机器人的状态设置为我在 !status
之后键入的任何内容。
但是,它会在第一个 space 之后停止,因为我 m[1]
没有 maxsplit
。现在,如果我将 maxsplit=1
添加到我的 split()
函数,我可以获得 m[1]
中第一个 space 之后的所有内容。这看起来很完美,对吧?假设我只是输入了和以前一样的东西,比如 !status test
,令人惊讶的是,它不起作用,即使 m[1]
只包含 test
,状态也没有更新。为什么? maxsplit=1
真正改变了什么我用 print(m[1])
看不到的?
如果没有 maxplit
,第一个空格之后就没有所有内容,那么 m[1]
just 包含第一个和第二个空格之间的所有内容(如果存在) ).
只有一个空格,它们是相同的:
>>> str1 = '!status test'
>>> str1.split()
['!status', 'test']
>>> str1.split(maxsplit=1)
['!status', 'test']
但如果有多个则不是:
>>> str2 = '!status test debug'
>>> str2.split() # 3 elements
['!status', 'test', 'debug']
>>> str2.split(maxsplit=1) # 2 elements
['!status', 'test debug']
我想你真正想要的是去掉 !status
:
>>> str1[len('!status '):] # or hardcode the length: `[8:]`
'test'
>>> str2[len('!status '):]
'test debug'
或者更简单 str.partition
:
>>> str1 = '!status test'
>>> str2 = '!status test debug'
>>> str1.partition(' ')
('!status', ' ', 'test')
>>> str2.partition(' ')
('!status', ' ', 'test debug')
第三个元素总是包含第一个空格之后的所有内容。您甚至可以检查第一个元素 == '!status'