#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
Комментариев нет:
Отправить комментарий