Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Как выйти из цикла python

#python_3x


Ищу циклом текущего пользователя компьютера в локальной сети

def scan_Lan():
    ip_list = ['192.168.4.']
    i = 50
    while i <= 240:
        scan_ip = ip_list[0] + str(i)
        response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait()
        if(response == 0):
            try:
                wql = 'SELECT *  FROM Win32_computerSystem'
                c = wmi.WMI(scan_ip, user='office\admin', password='fff')
                for item in c.query(wql):
                    currentUser = str(item.UserName)
                    print(currentUser)
                    if(currentUser == "ivanov"):
                        print(scan_ip)
                        break
            except:
                   print("-")
        i += 1
    print("end")

scan_Lan()


Все хорошо работает, но хочу после поиска выходить полностью из цикла while, как
это сделать? Поставил вот здесь

 print(scan_ip)
 break


но он по всей видимости выходит только из for, а как сделать глобальный break?
    


Ответы

Ответ 1



break прекращает только вложенный цикл. Внешний цикл продолжает работать. Используйте return, когда результат найден в вашем случае: if current_user == 'ivanov': return scan_ip

Ответ 2



Используйте флаг (булево значение) для выхода из циклов. При входе в условие currentUser == "ivanov" меняйте его значение на положительное, делайте break, а в основном цикле установите условие while i <= 240 and not result, тогда цикл будет завершен, как только result станет истиной. Глобального break, для выхода из всех циклов, не существует.

Ответ 3



Можно сделать так while i <= 240: scan_ip = ip_list[0] + str(i) response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait() if(response == 0): try: wql = 'SELECT * FROM Win32_computerSystem' c = wmi.WMI(scan_ip, user='office\admin', password='fff') for item in c.query(wql): currentUser = str(item.UserName) print(currentUser) if(currentUser == "ivanov"): print(scan_ip) break else: i += 1 # сюда зайдет, если цикл завершился полностью(то есть не было найдено) print("end") continue; except: print("-") break; # сюда попадем и прервем большой цикл, если во внутреннем был найден объект Вот более простой пример для понимания for x in xrange(10): for y in xrange(10): for z in xrange(10): print x,y,z if x*y*z == 30: break # прерываем внутренний цикл else: continue # продолжаем, если внутренний цикл не был прерван break # внутренний цикл был прерван, прерываем и этот цикл else: continue break

Ответ 4



a: list_ = [1, 2, 3, 4, 5] check = True while check: for v in list_: if v == 3: check = False break else: print(v) b: list_ = [1, 2, 3, 4] try: while True: for v in list_: if v == 3: raise UserWarning else: print(v) except UserWarning:pass 1 2

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

Отправить комментарий