2015-04-21 24 views
7

Có cách nào để thực hiện một cái gì đó như thế này:Bạn có thể "khởi động lại" vòng lặp hiện tại của vòng lặp Python không?

for row in rows: 
    try: 
     something 
    except: 
     restart iteration 
+2

Bạn có thể chuyển sang bước * tiếp theo * nhưng bạn không thể * thử lại * lặp lại hiện tại. – CoryKramer

+0

Đúng, nó được gọi là vòng lặp bên trong. – Shashank

+0

bạn có nghĩa là như 'redo' trong perl? Tôi nghĩ rằng không có điều như vậy trong python. – kratenko

Trả lời

9

Bạn có thể đặt try/except khối của bạn trong vòng lặp khác và sau đó phá vỡ khi nó thành công:

for row in rows: 
    while True: 
     try: 
      something 
      break 
     except Exception: # Try to catch something more specific 
      pass 
+0

sẽ không phải là "vượt qua" gây ra vòng lặp for để tiếp tục? – user3063864

+0

Không, bởi vì nó nằm trong vòng lặp while. Mã sẽ chỉ rơi vào cuối khối 'except' và lặp lại phía trên của vòng lặp' while'. Lưu ý rằng bạn cũng có thể sử dụng 'tiếp tục' nếu bạn muốn. – iCodez

+0

Vì vậy, tôi sẽ đặt điều này trước khi thịt thực sự của vòng lặp của tôi, và nó chỉ đơn giản là chạy cho đến khi "cái gì đó" được xác nhận để vượt qua, và sau đó nó chạy thực tế "cái gì" trong vòng lặp của tôi? – user3063864

3

Mặc dù tôi sẽ không khuyên bạn rằng, cách duy nhất để làm điều này là để thực hiện một while (true) Vòng cho đến khi nó được something Xong.

Ghi nhớ khả năng xảy ra vòng lặp vô hạn.

for row in rows: 
    try: 
     something 
    except: 
     flag = False 
     while not flag: 
      try: 
       something 
       flag = True 
      except: 
       pass 
+0

cảm ơn, điều này thực sự hữu ích – Jake

4

Bạn có thể làm cho hàng một iterator và chỉ trước khi không có lỗi.

it = iter(rows) 
row = next(it,"") 
while row: 
    try: 
     something 
     row = next(it,"") 
    except: 
     continue 

Một lưu ý phụ, nếu bạn chưa nhận được lỗi/lỗi cụ thể, ngoại trừ bạn không muốn bắt tất cả.

Nếu bạn có Falsey giá trị mà bạn có thể sử dụng đối tượng là giá trị mặc định:

it = iter(rows) 
row, at_end = next(it,""), object() 
while row is not at_end: 
    try: 
     something 
     row = next(it, at_end) 
    except: 
     continue 
+1

Điều này dường như rõ ràng hơn tôi so với câu trả lời 'while True:' – kratenko

1

Có bạn cho vòng lặp bên trong một vô hạn trong khi vòng lặp. Kiểm tra điều kiện nơi bạn muốn khởi động lại vòng lặp for với điều kiện if else và phá vỡ vòng lặp bên trong. có một điều kiện if bên trong vòng lặp while nằm ngoài vòng lặp for để phá vỡ vòng lặp while. Như sau:

while True: 
     for row in rows: 
     if(condition) 
     ..... 
     if(condition) 
     break 
    if(condition) 
    break 
Các vấn đề liên quan