Python nếu lỗi bỏ qua

Vì vậy, chúng tôi có các tập lệnh chạy tốt miễn là thông tin chúng tôi cung cấp cho họ là những gì họ mong đợi. Lỗi xuất hiện khi tập lệnh/chương trình gặp điều kiện mà nó không biết cách xử lý. Điều này không đáng sợ như bạn tưởng và thật tuyệt khi có các tập lệnh mà bạn có thể cảm thấy tự tin rằng sẽ không “gặp sự cố” ngay khi người khác cố gắng sử dụng chúng

Cái mà có thể sai lầm?

Chạy tập lệnh của bạn trên hệ thống của riêng bạn có thể hoạt động hoàn hảo nhưng liệu nó có hoạt động trên hệ thống khác không?

Một danh sách ngắn gọn về những gì thường có thể đi sai

  1. Lỗi cú pháp như lỗi chính tả hoặc đối số không chính xác
  2. Không thể tìm thấy hoặc truy cập các tệp mà tập lệnh cần
  3. Một danh sách được tạo động có thể hoàn toàn không được tạo hoặc các mục trong danh sách dự kiến ​​ở một chỉ mục (vị trí) nhất định bị thiếu
  4. Các giá trị được truyền dưới dạng đối số có thể không phải là giá trị mà tập lệnh mong đợi

Lỗi cú pháp

Khi bạn tạo tập lệnh của mình, rất thường xảy ra lỗi cú pháp, nghĩa là lỗi chính tả, phương thức được đặt tên không chính xác hoặc truyền sai số lượng đối số cho phương thức. Nắm bắt những điều này sớm dễ dàng hơn với trình chỉnh sửa như Spyder

  1. Chạy đoạn mã sau và xem lỗi - cũng lưu ý cách Spyder làm nổi bật sự cố

if (1 == 1)
    print("This is a syntax error")

Bạn sẽ thấy một đầu ra cho thấy thiếu một cái gì đó (cái này phải là cái gì?)

if (1 == 1)
               ^
SyntaxError: invalid syntax

Lỗi cú pháp sẽ ngăn mã chạy ngay từ đầu. Các lỗi chỉ xuất hiện khi chương trình của bạn đang chạy được gọi là “Lỗi thời gian chạy”. Bây giờ chúng ta sẽ xem làm thế nào để đối phó với điều này

May mắn thay, chúng ta có thể phát hiện những lỗi này và sau đó làm điều gì đó với chúng trước khi chúng đột ngột kết thúc chương trình của chúng ta. Cấu trúc này là một khối mã “thử ngoại trừ cuối cùng” bao quanh mã của bạn

try:
  prnt("This is a name error")  #misspelt print so no method found
except NameError as e:
  print("Caught this error:", e)
finally:
  print("I'm always going to run this bit")

Phần finally là tùy chọn

Lỗi "Vẫn tiếp tục"

Khi chạy trong một vòng lặp và lỗi nhỏ, chẳng hạn như dòng đầu tiên trong tệp văn bản trống và bạn chỉ muốn bỏ qua nó, hãy sử dụng

if (1 == 1)
               ^
SyntaxError: invalid syntax
0 trong khối
if (1 == 1)
               ^
SyntaxError: invalid syntax
1 để yêu cầu chương trình chuyển sang hướng dẫn tiếp theo

Lỗi "Dừng chạy nếu điều này xảy ra"

Khi chạy trong một vòng lặp và lỗi lớn và bạn không thể tiếp tục nếu không có thông tin

  1. sử dụng
    if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    2 và vòng lặp sẽ kết thúc
  2. sử dụng
    if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    3 và chương trình sẽ chuyển sang hướng dẫn tiếp theo
  3. if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    4
    if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    5
    if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    6 và
    if (1 == 1)
                   ^
    SyntaxError: invalid syntax
    
    7 sẽ giết trình thông dịch Python, vì vậy hãy tránh nếu có thể hoặc ít nhất là sử dụng một cách thận trọng

Đọc tập tin

Vì vậy, chúng ta sẽ xem cách đưa cái này vào một tập lệnh đọc dữ liệu gapminder như chúng ta đã làm trong các bài học trước. Các tệp có thể bị thiếu hoặc không truy cập được, vì vậy chúng tôi sẽ đưa vào tính năng bắt lỗi để thông báo cho chúng tôi về những sự cố này

Câu lệnh continue trong Python là một trong những câu lệnh vòng lặp điều khiển luồng của vòng lặp. Cụ thể hơn, câu lệnh continue bỏ qua “phần còn lại của vòng lặp” và chuyển sang phần đầu của lần lặp tiếp theo

Không giống như lệnh break, lệnh continue không thoát khỏi vòng lặp

Ví dụ: để in các số lẻ, hãy sử dụng tiếp tục bỏ qua in các số chẵn

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

Vòng lặp này bỏ qua chức năng in khi gặp số chẵn (số chia hết cho 2)

1
3
5
7
9

Dưới đây là minh họa về cách hoạt động của đoạn mã trên khi n chẵn

Python continue statement

Tiếp tục tuyên bố chi tiết hơn

Trong Python, câu lệnh continue nhảy ra khỏi lần lặp hiện tại của một vòng lặp để bắt đầu lần lặp tiếp theo

Trường hợp sử dụng điển hình cho câu lệnh continue là kiểm tra xem một điều kiện có được đáp ứng hay không và bỏ qua phần còn lại của vòng lặp dựa trên điều kiện đó

Sử dụng câu lệnh continue đôi khi có thể là một phần quan trọng để làm cho thuật toán hoạt động. Đôi khi nó chỉ tiết kiệm tài nguyên vì nó ngăn chạy mã thừa

Trong Python, câu lệnh continue có thể được sử dụng với cả vòng lặp for và while

while condition:
    if other_condition:
        continue

for elem in iterable:
    if condition:
        continue

Chẳng hạn, bạn có thể sử dụng câu lệnh continue để bỏ qua việc in các số chẵn

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

đầu ra

1
3
5
7
9

Tiếp tục so với If-Else trong Python

Câu lệnh continue hoạt động giống như câu lệnh if-else. Sử dụng câu lệnh continue về cơ bản giống như đặt mã vào khối if-else

Trong các trường hợp đơn giản, tốt hơn hết là sử dụng câu lệnh if-else thay vì câu lệnh continue

Chẳng hạn, hãy lặp qua các số từ 1 đến 10 và in loại số lẻ của các số

Đây là cách tiếp cận tiếp tục

for num in range(1, 10):
    if num % 2 == 0:
        print("Even number: ", num)
        continue
    print("Odd number: ", num)

đầu ra

Odd number:  1
Even number:  2
Odd number:  3
Even number:  4
Odd number:  5
Even number:  6
Odd number:  7
Even number:  8
Odd number:  9

Sau đó, hãy chuyển đổi cách tiếp cận này thành câu lệnh if-else

for num in range(1, 10):
    if num % 2 == 0:
        print("Even number: ", num)
    else:
        print("Odd number: ", num)

đầu ra

Odd number:  1
Even number:  2
Odd number:  3
Even number:  4
Odd number:  5
Even number:  6
Odd number:  7
Even number:  8
Odd number:  9

Như bạn có thể thấy, cách tiếp cận thứ hai cung cấp một cách rõ ràng hơn để thể hiện ý định của bạn. Bằng cách nhìn vào đoạn mã này, ngay lập tức rõ ràng nó làm gì. Tuy nhiên, nếu bạn nhìn vào cách tiếp cận cũ với các câu lệnh tiếp tục, bạn cần phải vò đầu bứt tai một chút trước khi xem chuyện gì đang xảy ra

Đây là một ví dụ tuyệt vời khi bạn có thể sử dụng câu lệnh if-else thay vì sử dụng câu lệnh continue

Ngoài ra, nếu bạn xem ví dụ trước về việc in các số lẻ từ một dãy

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

Bạn thấy việc sử dụng if-check ở đây cũng tốt hơn, thay vì trộn nó với câu lệnh continue

1
3
5
7
9
0

Nhưng bây giờ bạn có thể tự hỏi tại sao bạn nên sử dụng tiếp tục nếu nó chỉ làm cho mã khó đọc hơn. Hãy xem một số trường hợp sử dụng tốt cho câu lệnh continue

Khi sử dụng Tiếp tục Python

Như đã nêu trước đó, bạn có thể thay thế câu lệnh continue bằng câu lệnh if-else

Ví dụ, đoạn mã này

1
3
5
7
9
1

Làm tương tự như cái này

1
3
5
7
9
2

Trong các trường hợp đơn giản, sử dụng if-else thay vì tiếp tục là một ý tưởng hay. Nhưng chắc chắn cũng có một số trường hợp sử dụng cho câu lệnh continue

Ví dụ

  1. Bạn có thể tránh các câu lệnh if-else lồng nhau bằng cách sử dụng continue
  2. Continue có thể giúp bạn xử lý ngoại lệ trong vòng lặp for

Hãy xem ví dụ về cả hai

1. Tránh các câu lệnh If-Else lồng nhau trong một vòng lặp với Continue trong Python

Hãy tưởng tượng bạn có nhiều điều kiện mà bạn muốn bỏ qua vòng lặp. Nếu bạn chỉ dựa vào các câu lệnh if-else, mã của bạn sẽ hỗn loạn theo hình kim tự tháp

1
3
5
7
9
3

Đây là cơn ác mộng của mọi nhà phát triển. Một mớ hỗn độn if-else lồng nhau không thể quản lý

Tuy nhiên, bạn có thể làm cho đoạn mã trên sạch hơn và đẹp hơn bằng cách sử dụng câu lệnh continue

1
3
5
7
9
4

Bây giờ, thay vì có cấu trúc lồng nhau của các câu lệnh if-else, bạn có cấu trúc phẳng chỉ gồm các câu lệnh if. Điều này có nghĩa là mã dễ hiểu hơn và dễ bảo trì hơn—nhờ câu lệnh continue

2. Tiếp tục trong phần Xử lý lỗi—Thử, Ngoại trừ, Tiếp tục

Nếu bạn cần xử lý các ngoại lệ trong một vòng lặp, hãy sử dụng câu lệnh continue để bỏ qua “phần còn lại của vòng lặp”

Ví dụ: hãy xem đoạn mã xử lý lỗi trong vòng lặp này

1
3
5
7
9
5

Bây giờ vòng lặp thực thi chức năng in cuối cùng bất kể có ném ngoại lệ hay không

1
3
5
7
9
6

Để tránh điều này, hãy sử dụng câu lệnh continue trong khối except. Điều này bỏ qua phần còn lại của vòng lặp khi một ngoại lệ xảy ra

1
3
5
7
9
7

Bây giờ vòng lặp bỏ qua chức năng in cuối cùng

1
3
5
7
9
8

Điều này hữu ích nếu chức năng in lần cuối là thứ bạn không nên vô tình chạy khi xảy ra lỗi

Phần kết luận

Hôm nay bạn đã học cách sử dụng câu lệnh continue trong Python

Tóm lại, câu lệnh continue trong Python bỏ qua “phần còn lại của vòng lặp” và bắt đầu một phép lặp. Điều này hữu ích nếu phần còn lại của vòng lặp bao gồm mã không cần thiết

Ví dụ: bạn có thể bỏ qua việc in các số chẵn và chỉ in các số lẻ bằng cách

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

Ở đây vòng lặp bỏ qua chức năng in cuối cùng nếu gặp số chẵn

Tuy nhiên, câu lệnh if-else thường tốt hơn là sử dụng câu lệnh if với câu lệnh continue. Tuy nhiên, với nhiều điều kiện, câu lệnh continue sẽ ngăn các khối if-else lồng nhau không thể quản lý được

Cái nào được sử dụng để bỏ qua bước lặp dựa trên điều kiện?

Trong C, nếu bạn muốn bỏ qua các bước lặp khi đáp ứng một điều kiện cụ thể, bạn có thể sử dụng câu lệnh continue . Không giống như câu lệnh break, câu lệnh continue không thoát khỏi vòng lặp. Thay vào đó, nó chỉ bỏ qua những bước lặp mà điều kiện là đúng.

Làm cách nào để in lỗi ngoại trừ Python?

Nếu bạn định in ngoại lệ, tốt hơn nên sử dụng print(repr(e)) ; ngoại lệ cơ sở. Việc triển khai __str__ chỉ trả về thông báo ngoại lệ, không phải loại. Hoặc, sử dụng mô-đun theo dõi, có các phương pháp để in ngoại lệ hiện tại, được định dạng hoặc truy nguyên đầy đủ.