为何出现AttributeError: 'NoneType'对象无'send'属性?如何解决?
问题解决:AttributeError: 'NoneType' object has no attribute 'send'
问题根源
你的ProducerConsumer类构造函数存在逻辑错误:没有将传入的isProducer、isConsumer参数赋值给类的私有属性self.__isProducer和self.__isConsumer,导致后续判断是否创建生产者/消费者的条件永远不成立,__producer始终为None,调用send_topic时自然会触发NoneType没有send方法的错误。
修复方案
修改customKafka.py中的__init__方法,先将传入的参数赋值给私有属性,再执行生产者/消费者的初始化逻辑:
from kafka import KafkaConsumer from kafka import KafkaProducer import json class ProducerConsumer: __isProducer=None __isConsumer=None __producer=None __consumer=None def __init__(self,isProducer,isConsumer,topic,bootstrap_servers): # 先将传入的参数赋值给私有属性 self.__isProducer = isProducer self.__isConsumer = isConsumer if self.__isProducer: self.__producer=KafkaProducer(bootstrap_servers=bootstrap_servers) if self.__isConsumer: self.__consumer= KafkaConsumer( topic, bootstrap_servers=bootstrap_servers, auto_offset_reset='earliest', enable_auto_commit=True, consumer_timeout_ms = 10000) def get_producer(self): return self.__producer def get_consumer(self): return self.__consumer def send_topic(self,topic,data): self.get_producer().send(topic, json.dumps(data).encode("utf-8"))
验证
修改后重新运行scrapeBackend.py,生产者实例会被正确初始化,send_topic方法可以正常向Kafka发送消息。
内容的提问来源于stack exchange,提问作者scanpower
相关产品推荐
相关产品推荐

