Python版本3.7.1 uamqp-1.1.0
请帮助我们,我们在uamqp / client.py的453行中,在 init 中出现此错误:
super(SendClient,自身)。初始化( TypeError:super(type,obj):obj必须是类型的实例或子类型
它的发生是由于
sender = client.add_sender(partition="0")
这是代码:
import sys
import logging
import datetime
import time
import os
from azure.eventhub import EventHubClient, Sender, EventData
logger = logging.getLogger("azure")
ADDRESS = "amqps://xxx.servicebus.windows.net/xxx"
USER = "xxx"
KEY = "xxx"
try:
if not ADDRESS:
raise ValueError("No EventHubs URL supplied.")
# Create Event Hubs client
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
sender = client.add_sender(partition="0")
#self = <class 'uamqp.client.SendClient'>
client.run()
try:
start_time = time.time()
for i in range(10):
print("Sending message: {}".format(i))
#sender.send(EventData())
except:
raise
finally:
end_time = time.time()
client.stop()
run_time = end_time - start_time
logger.info("Runtime: {} seconds".format(run_time))
except KeyboardInterrupt:
pass
非常感谢您!
Github上的相关问题:https://github.com/Azure/azure-event-hubs-python/issues/93
答案 0 :(得分:0)
有一个SO线程super(type, obj): obj must be an instance or subtype of type,答案中介绍了许多会导致与您相同的问题的情况。
我搜索了Azure/azure-event-hubs-python
和Azure/azure-uamqp-python
的源代码之后,我认为您的问题是由uamqp/client.py#L470
中的以下代码引起的,该代码与以上帖子中的SO线程的答案有关。 @Eldamir。
super(SendClient, self).__init__(
target,
auth=auth,
client_name=client_name,
debug=debug,
error_policy=error_policy,
keep_alive_interval=keep_alive_interval,
**kwargs)
另一种有趣的方式是,如果分支的合并重复了该类,那么在文件中您将有两个名称相同的定义,例如
class A(Foo): def __init__(self): super(A, self).__init__() #... class A(Foo): def __init__(self): super(A, self).__init__() #...
如果您尝试通过对A的第一个定义的静态引用创建实例,则一旦它尝试调用super,就在 init 方法内部,A将引用A的第二个定义,因为它已被覆盖。当然,解决方案是删除该类的重复定义,以免覆盖它。
这似乎永远不会发生,但只是在我没有充分关注两个分支的合并时,它才发生在我身上。我的测试失败了,并显示了问题中描述的错误消息,所以我认为我将发现留在这里,即使它不能完全回答特定问题。
因此,我想您定义了一个名为SendClient
的类,它导致与SendClient
中的uamqp/client.py
类发生名称冲突。