Vnstock Logo

Xử lý lỗi

Thử nghiệm

Mục lục

Bản thử nghiệm, chưa phát hành chính thức

Trang này viết cho vnstock v6.0.0rc2, bản thử nghiệm. Tên hàm, tham số và cột dữ liệu có thể còn đổi trước ngày phát hành; khi cài, ghi rõ số phiên bản như ở trang Cài đặt. Bản đang phát hành chính thức là v5.0.1, xem tài liệu bản đó.

Nguồn của bạn

Chọn nguồn bạn có khoá, mã trên trang sẽ điền theo. Chưa chọn thì mã giữ chỗ trống <nguồn>. Nguồn xếp theo bảng chữ cái, không phải khuyến nghị.

Các lỗi mà vnstock thế hệ 6 trả ra đều kế thừa vnstock.errors.VnstockError. Mỗi lỗi có code (mã ổn định để so khớp), message, action (cách xử lý) và retryable (có nên thử lại hay không).

Python
from vnstock import Market, errors

try:
    df = Market("<nguồn>").equity("FPT").ohlcv(start="2026-10-01")
except errors.CredentialError as exc:
    print(exc.action)              # cách thêm khoá
except errors.VnstockError as exc:
    print(exc.code, exc.message)

So khớp bằng code hoặc lớp lỗi, không so khớp câu chữ của message.

Gặp lỗi về khoá, phiên hay phiên bản, chạy vnstock doctor trước: lệnh này kiểm cả máy và in cách sửa từng mục.

Lớp lỗi

LớpKhi nàoGọi lại được
InputErrorTham số sai, thiếu nguồn, thiếu mãKhông
CredentialErrorChưa có khoá của nguồn trên máyKhông
AuthErrorNguồn từ chối khoáKhông
LoginRequiredError, OtpRequiredErrorPhiên của nguồn hết hạn, cần đăng nhập hoặc OTPKhông
RateLimitErrorNguồn đang giới hạn tần suấtCó
ClockSkewErrorĐồng hồ máy lệch so với nguồnKhông
NetworkErrorHết thời gian chờ, mất kết nối, lỗi TLSCó
SourceErrorNguồn lỗi hoặc trả nội dung lạTuỳ mã
UnsupportedErrorHàm chưa có nguồn đọc được, hoặc đã ngừngKhông
PolicyErrorNguồn đang tạm tắt theo chính sách máy kháchKhông
EnvelopeError, PayloadErrorDữ liệu nguồn gửi không đọc được theo chuẩnKhông

Cảnh báo:

  • CompatibilityWarning báo cách gọi thế hệ 5 đã đổi, hoặc hàm chưa có dữ liệu.
  • SchemaChangeWarning, lớp con của CompatibilityWarning, báo bảng trả về khác thế hệ 5 theo cách làm hỏng mã cũ hoặc đổi nghĩa con số. Thuộc tính change là mã thay đổi (SCH-A03), severity là breaking hoặc semantic. Mỗi thay đổi chỉ cảnh báo một lần; df.attrs["schema_changes"] luôn liệt kê đủ.
  • DataWarning mã VNSTOCK_DATA_TRUNCATED báo kết quả thiếu: việc lật trang dừng ở trần mà nguồn vẫn còn dữ liệu. Chia nhỏ khoảng thời gian rồi gọi lại; df.attrs["truncated"] ghi chi tiết.
  • DataWarning ở báo cáo tài chính: VNSTOCK_VAS_IDENTITY (một đẳng thức của mẫu biểu không đúng với số nguồn gửi, xem df.attrs["identities"]), VNSTOCK_VAS_UNMAPPED (nguồn gửi trường bộ chỉ tiêu chưa có, xem df.attrs["unmapped_keys"]), VNSTOCK_TAXONOMY_* (đang dùng bộ chỉ tiêu rút gọn, kèm lý do). Xem Báo cáo tài chính.

Mã lỗi thường gặp

MãNghĩaCách sửa
VNSTOCK_INPUT_SOURCEChưa chọn nguồnMarket("<nguồn>"), source="<nguồn>", hoặc vnstock.sources.use(...)
VNSTOCK_INPUT_ROUTEQuy tắc nguồn không khớp hàm nàoDùng tên như market.equity.quote, mẫu như market.crypto.*, hoặc bỏ route
VNSTOCK_INPUT_PARAMHàm không nhận tham số nàyXem cột "Tham số" của hàm
VNSTOCK_INPUT_SYMBOLMã trống, sai dạng, hoặc hàm cần mãTruyền mã, ví dụ FPT, VNINDEX, VN30F1M
VNSTOCK_INPUT_MISSING_IDNguồn cần mã mà lời gọi nhóm không có mãGọi kèm mã: Reference("<nguồn>").equity("FPT").price_limits(), hoặc symbol="FPT"
VNSTOCK_INPUT_START_DATE, VNSTOCK_INPUT_END_DATENgày sai dạngYYYY-MM-DD
VNSTOCK_INPUT_DATE_RANGEend đứng trước startĐổi lại thứ tự
VNSTOCK_INPUT_INTERVALKhung thời gian không hợp lệ1m 3m 5m 15m 30m 1H 4H 1D 1W 1M; mỗi nguồn hỗ trợ một phần
VNSTOCK_INPUT_LENGTHlength không phải số nến hay khoảng thời gianlength=100 hoặc length="3M"
VNSTOCK_INPUT_NAMEScompat không phải v5 hay v6Dùng một trong hai
VNSTOCK_INPUT_REPORT_PERIODKỳ báo cáo không phải năm hay quýperiod="year", period="quarter", hoặc bỏ trống để lấy cả hai
VNSTOCK_INPUT_COMPANY_TYPEcompany_type không khớp mẫu biểu nguồn trảBỏ company_type, hoặc dùng loại hình ghi trong thông báo
VNSTOCK_INPUT_TABLE_FORMATformat của báo cáo tài chính không hợp lệlong, wide hoặc time_series
VNSTOCK_VAS_TEMPLATE_UNSUPPORTEDMẫu biểu báo cáo tài chính chưa có cây chỉ tiêuLấy dữ liệu thô bằng vnstock_oapi
VNSTOCK_ROUTE_UNSUPPORTEDNguồn này chưa có dữ liệu cho hàmĐổi source= sang nguồn ghi trong thông báo
VNSTOCK_ROUTE_REMOVEDHàm đã ngừng từ thế hệ 5Dùng lời gọi thay thế ghi trong thông báo
VNSTOCK_CREDENTIAL_MISSINGMáy chưa có khoá của nguồnvnstock-oapi keys set <nguồn>; vnstock keys xem nguồn nào đã có khoá
VNSTOCK_SOURCE_AUTHNguồn từ chối khoávnstock-oapi check; tạo lại khoá nếu cần
VNSTOCK_SOURCE_OTPPhiên cần OTP hoặc mật khẩu mớivnstock-oapi auth <nguồn>
VNSTOCK_SOURCE_RATE_LIMITEDNguồn giới hạn tần suấtChờ rồi gọi lại; giảm số mã mỗi lần
VNSTOCK_SOURCE_UNAVAILABLENguồn đang lỗi hoặc ngoài giờ phục vụGọi lại sau
VNSTOCK_SOURCE_DISABLEDNguồn tạm tắt theo chính sách máy kháchXem lý do trong thông báo; vnstock.account.policy()
VNSTOCK_PAYLOAD_PRICE_UNITGiá ngoài dải hợp lý của đơn vịBáo lỗi kèm df.attrs hoặc thông báo lỗi
VNSTOCK_PAYLOAD_SHAPENguồn gửi dữ liệu khác dạng mong đợiBáo lỗi; nguồn có thể vừa đổi định dạng
VNSTOCK_RELEASE_EXPIREDBản vnstock đã hết hạn dùngvnstock update, hoặc lệnh cài trong thông báo

Khi thiếu khoá hoặc khoá bị từ chối, vnstock báo lỗi ngay và không chuyển sang nguồn dự phòng. Hãy sửa khoá rồi gọi lại. Xem Chọn nguồn.

Lỗi ở dòng lệnh khi cất khoá

LỗiNghĩaCách sửa
NoKeyringError khi chạy vnstock-oapi keys setMáy không có keyring (GitHub Codespaces, Docker, máy chủ Linux, WSL). Khoá chưa được cấtĐặt khoá bằng biến môi trường hoặc tệp .env riêng tư. Nguồn có phiên thì đặt thêm VNSTOCK_OAPI_SESSION_BACKEND=file. Xem Máy không có keyring
CredentialError: Chưa có khoá khi chạy vnstock-oapi authNguồn có phiên nhưng máy chưa có khoáThêm khoá trước, rồi chạy lại auth
auth báo "không cần phiên" nhưng gọi dữ liệu vẫn thiếu khoáNguồn không có phiên (xem vnstock keys), nên auth không kiểm khoávnstock-oapi check <nguồn>