** 之后的参数必须是一个映射,而不是 ChatPermissions

argument after ** must be a mapping, not ChatPermissions

当我打印对象时:

print(permissions)

它有这样的输出:

{'can_send_messages': True, 'can_send_media_messages': True, 'can_send_polls': True, 'can_send_other_messages': True, 'can_add_web_page_previews': True, 'can_change_info': True, 'can_invite_users': True, 'can_pin_messages': True}

就像一个映射对象 但是当我尝试将其作为参数时:

some_method(id, **permissions)

它给出错误:

 argument after ** must be a mapping, not ChatPermissions

有什么问题,我该如何解决?

这不是最优雅的解决方案,但在这种情况下是可行的:

import ast
some_method(id, **ast.literal_eval(str(permissions)))

ChatPermissionstoString() 方法看起来像字典,即使它不是字典。因此,我们可以用它来创建一个字典,然后有一个映射对象。

假设 ChatPermissionstelegram 库中的 class,那么您可以这样做:

some_method(id, **permissions.to_dict())

一般来说,你也可以使用__dict__来获取对象属性的字典:

some_method(id, **permissions.__dict__)

根据source codeto_dict方法本身使用__dict__,但排除了一些属性(bot和以下划线开头的属性)。