Khi tham gia làm bài trên các trang web về lập trình thi đấu (competitive programming), nhiều người đã gặp phải lỗi NZEC. NZEC (viết tắt của Non zero exit code) xảy ra khi code của bạn không trả về 0. Khi code trả về 0, điều đó có nghĩa là nó đã được thực thi thành công, nếu không thì nó sẽ trả về một số giá trị số khác tùy thuộc vào loại lỗi.

Khi chương trình kết thúc và trả về 0, điều đó cho thấy nó đã được thực thi thành công, tuy nhiên nếu chương trình không thể trả về 0, thì điều đó sẽ gây ra lỗi NZEC. Có nhiều trường hợp khác nhau được gắn với lỗi NZEC.

1. Tại sao lỗi NZEC xảy ra? (một ví dụ)

Trong Python, thông thường các inputs (dữ liệu nhập vào) sẽ được phân tách bởi dấu phẩy, và chúng ta sẽ đọc chúng bằng cách sử dụng hàm input() hoặc int(input()), nhưng hầu hết các đề bài trên các nền tảng lập trình trực tuyến đều cho các inputs được phân tách nhau bởi khoảng trắng (space), và trong những trường hợp như vậy thì int(input()) sẽ không thể đọc được đúng các inputs, do đó lỗi NZEC sẽ xảy ra.

2. Làm thế nào để giải quyết lỗi NZEC?

Giả sử chúng ta có một chương trình đơn giản đọc vào 2 số nguyên và in ra chúng (trong file input thì hai số nguyên cùng nằm trên một dòng). Ví dụ hai số nguyên mà bạn đang có là:

23 45

Thay vì sử dụng:

n = int(input())
k = int(input())

Bạn hãy sử dụng:

n, k = raw_input().split(" ")
n = int(n)
k = int(k)

để có thể phân tách các inputs bằng khoảng trắng.

3. Code sai


n = int(input()) 
k = int(input()) 
print n," ",k 

Input:

2 3

Khi bạn chạy đoạn code trên trong IDE với input như ở trên, bạn sẽ nhận được lỗi:

Traceback (most recent call last):
  File "b712edd81d4a972de2a9189fac8a83ed.py", line 1, in 
    n = int(input())
  File "", line 1
    2 3
      ^
SyntaxError: unexpected EOF while parsing

Đoạn code trên sẽ hoạt động ổn khi các inputs nằm trên hai dòng khác nhau. Bạn có thể tự kiểm tra lại điều này. Để không gặp phải lỗi này, bạn cần sử dụng hàm split() để phân tách các inputs.

4. Code đúng


n, k = raw_input().split(" ") 
n = int(n) 
k = int(k) 
print n," ",k 

Input:

7 3

Output:

7   3

5. Một số nguyên nhân nổi bật gây lỗi NZEC

– Đệ quy vô hạn hoặc bạn đã sử dụng cạn kiệt bộ nhớ stack

– Cả phần Input và phần Output đều không giống chính xác với các test cases mà đề bài cung cấp

– Loại lỗi này cũng sẽ xuất hiện khi chương trình của bạn mắc phải một số lỗi lập trình cơ bản như chia cho 0.

– Không kiểm tra kỹ các giá trị của các biến bên trong chương trình, chúng có thể dễ bị tổn thương đối với các lỗi tràn số nguyên.

Có thể có một số lý do khác làm cho lỗi NZEC xảy ra, nhưng ở trên là những lý do thường xuyên xuất hiện.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!