'模块不可调用'当对象转换为字符串时

时间:2016-10-24 04:32:44

标签: python discord

我正在使用python 3.5的扩展程序,使其能够使用Discord API与聊天机器人进行通信。

扩展程序为python添加了一些对象,包括Channel对象,它保存了一个通道的唯一ID。

在这段代码中;

async def on_message(message):
  if message.author==bot.user or message.channel!=CHANNEL:
    print("Either not replying to myself, or recieved message from the wrong channel; '"+string(message.channel)+"' when I was expecting '"+(CHANNEL)+"'...")
    return

对于某些上下文,CHANNEL是一个常量,设置为我希望机器人与之交互的目标通道,bot是与服务器的连接,bot.user是一个包含聊天机器人ID的成员对象。

if语句工作正常,但在将message.channel转换为字符串时,会显示以下错误; TypeError: 'module' object is not callable。这是为什么?

我可以提供更多详细信息,如果这没有意义,API参考也是here

编辑:提供更多背景信息。

2 个答案:

答案 0 :(得分:0)

您的代码中可能有import string之类的语句,然后您正在尝试string(message.channel),这是引发此异常的地方,因为您无法调用模块string一个功能。

以下是一个例子:

>>> import string
>>> string('hello')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable

在您的代码中,通过格式化您的消息来尝试更简单的事情:

msg = "Either not replying to myself, or received message from the wrong channel; '{}' when I was expecting '{}'..."
print(msg.format(message.channel, CHANNEL))

答案 1 :(得分:0)

我找到了答案,这仅适用于使用discord.py;

的人

原来,Channel变量不能直接相互比较;我不得不使用message.channel.id != CHANNEL.id来让事情变得更好。