When I used CoFlatMapFunction in pyflink, I found out that I must put yield something in both flat_map1 and flat_map2. Otherwise, it will raise an exception: TypeError: 'NoneType' object is not iterable.
In pyflink source code: datastream.py, the process_element2 of KeyedCoMapCoProcessFunction class in ConnectedStreams class has only one sentence:
yield self._underlying.map2(value). if the flat_map2 has not yield something it will result in exception. So it should judge whether the self._underlying.map2(value) is None or not firstly.