Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Lỗi NZEC (Non-Zero Exit Code) trong Python là gì?

NZEC (Non-Zero Exit Code): Mã thoát khác 0, báo hiệu chương trình kết thúc bất thường (runtime error). Exit code 0 = thành công.

Nguyên nhân phổ biến

  • Truy cập index âm hoặc vượt giới hạn mảng.
  • Vượt bộ nhớ (Memory Limit Exceeded).
  • Đệ quy vô tận hoặc stack overflow.
  • Chia cho 0 (ZeroDivisionError).
  • Input/output không khớp format yêu cầu (competitive programming).
  • Biến bị overflow (hiếm trong Python do int unbounded).
  • Tính giai thừa lớn (>20) không dùng thuật toán tối ưu.

Xử lý với try-except

try:
    # code có thể gây lỗi
except Exception as e:
    # log hoặc xử lý
    pass  # hoặc sys.exit(1)

Ví dụ 1: Đọc input sai/correct

# Sai: input() trả về string, map(int, ...) không tách được
x, y = map(int, input())          # ValueError nếu nhập "1 2"

# Đúng: tách bằng split()
x, y = map(int, input().split())  # "1 2" -> ['1','2'] -> (1,2)

Ví dụ 2: Đọc mảng số nguyên

# Sai: vòng lặp input() từng dòng - chậm, dễ NZEC nếu EOF
for i in range(n):
    x = int(input())
    arr.append(x)

# Đúng: đọc cả dòng, split, map
arr = list(map(int, input().split()))
# Hoặc list comprehension
arr = [int(k) for k in input().split()]

Checklist debug NZEC (Competitive Programming)

  1. Kiểm tra edge cases: n=0, n=1, input rỗng, số lớn.
  2. Đảm bảo output format chính xác (không thừa space, newline).
  3. Tránh đệ quy sâu -> dùng vòng lặp hoặc tăng sys.setrecursionlimit().
  4. Kiểm tra chia cho 0.
  5. Dùng sys.stdin.read().split() đọc toàn bộ input nhanh hơn.
  6. Test với sample input/output chính xác.

Template an toàn cho CP

import sys

def solve():
    data = sys.stdin.read().split()
    if not data:
        return
    it = iter(data)
    # parse data từ iterator it
    # print kết quả

if __name__ == "__main__":
    solve()