擅长:python、mysql、java
<p>问题:</p>
<pre><code>namereg = None
@client.command(pass_context=True)
async def namereg(ctx, *, arg):
global namereg
</code></pre>
<p>这个坏了。代码顶层的函数<strong>是</strong>全局变量,并且位于同一命名空间中。给它一个与存储变量不同的名称</p>
<pre><code> namereg = {arg}
</code></pre>
<p>这将获取来自用户输入的字符串,并使用单个元素创建一个<a href="https://docs.python.org/3.8/library/stdtypes.html#set-types-set-frozenset" rel="nofollow noreferrer">set</a>。那不是你想要的。您希望输入字符串是注册的名称,所以只需直接分配它</p>
<pre><code> y = {"name": f"{namereg}"}
</code></pre>
<p>我假设您使用这种奇特的格式是因为您之前遇到了一个错误(因为<code>json</code>在默认情况下不会序列化集合,因为JSON数据格式没有直接的方式来表示它们)。您应该更仔细地听这个错误消息,首先询问您为什么有无效类型的数据。输出中的<code>{}</code>和<code>''</code>来自使用字符串格式进行字符串化的集合的字符串表示。要使用的普通字符串不需要任何格式来转换为字符串,因为它已经是字符串</p>