generator.next () видим в python 3.0?

Вот еще один идиоматический вариант использования помимо поиска. Допустим, вы хотели подождать, пока условие будет выполнено, например, порт, который будет открыт на удаленном сервере, а также некоторое время ожидания. Тогда вы можете использовать конструкцию while...else следующим образом:

import socket
import time

sock = socket.socket()
timeout = time.time() + 15
while time.time() < timeout:
    if sock.connect_ex(('127.0.0.1', 80)) is 0:
        print('Port is open now!')
        break
    print('Still waiting...')
else:
    raise TimeoutError()
226
задан Craig McQueen 1 August 2009 в 18:00
поделиться

2 ответа

Правильно, g.next () был переименован в ] g .__ следующий __ () . Причина этого в согласованности: все специальные методы, такие как __ init __ () и __ del __ , имеют двойное подчеркивание (или "dunder" в текущем жаргоне), и .next () было одним из немногих исключений из этого правила. Это было исправлено в Python 3.0. [*]

Но вместо вызова g .__ next __ () , как говорит Паоло, используйте next (g) .

[*] Есть и другие особые атрибуты, которые получили это исправление; func_name , теперь __ name __ и т. Д.

372
ответ дан 23 November 2019 в 03:52
поделиться

Попробуйте:

next(g)

Посмотрите эту аккуратную таблицу , которая показывает различия в синтаксисе между 2 и 3, когда доходит до этого.

133
ответ дан 23 November 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: