Выход генератора Python PyShark

#python #pyshark

#python #pyshark

Вопрос:

У меня есть блок кода, который считывает ICMP-пакеты из PyShark. Нравится :

 capture = pyshark.LiveCapture(interface=self.networkInterface)
        packet_generator = capture.sniff_continuously()
        while True:
            if self.exitProgram:
                try:
                    raise pyshark.capture.capture.StopCapture()
                except Exception as e:
                    print("Stopping ICMP Listener")
                break

            try:
                print("Look if there is Packet")
                packet = next(packet_generator)
                handlePacket(packet)
            except:
                print("No Packet")
            sleep(0.25)
  

Метод capture.sniff_continuously возвращает генератор. Когда создается ICMP-пакет, он перехватывает его и отправляет handlePacket , но когда этого не происходит, я ожидаю вывода типа,

 Look if there is Packet
No Packet
  

Однако он просто печатает Look if there is Packet и ожидает, чего я не хочу. Как поддерживать его работу с заданным циклом и проверять, прибыл ли пакет или нет?

Комментарии:

1. Можете ли вы попробовать исключить последний оператор except? Вы получаете сообщение об ошибке, если пакета нет, а оператор закомментирован?

2. Большое вам спасибо за интерес. Я попытался удалить блок try except и просто вызвать packet = next(packet_generator) . И оператор печати после этого. Я не получил ошибки исключения, и текст внутри печати НЕ печатается.

3. Глядя на желаемый результат, вы в настоящее время ожидаете ошибки, если нет доступного пакета (поскольку это единственный случай, когда выполняется оператор except). Самый простой способ исправить это, вероятно, просто отказаться от этого и написать другой оператор if