Error Handling

Error handling guidelines for NeMo-RL. Covers exception specificity, minimal try bodies, and else blocks.

NVIDIA-NeMo 3ec5e03 1.3 KB Updated

File contents

Error Handling

Use Specific Exceptions

When using try-except blocks, limit the except to the smallest set of errors possible.

Don't:

try:
    open(path, "r").read()
except:
    print("Failed to open file")

Do:

try:
    open(path, "r").read()
except FileNotFoundError:
    print("Failed to open file")

Fail Loud, Not Silent

When adding a config option or branch, ask: what does the worst plausible misconfiguration do? If it silently produces wrong results rather than an error, add a setup-time assert/raise so it fails loudly at startup instead of corrupting a run.

Examples of silent-wrong worth guarding:

  • An advantage estimator that needs a real prev_logprobs while a loss flag zeroes it (advantage degrades to garbage with no error).
  • An agent routed to a teacher alias that has no worker group (cryptic KeyError mid-run instead of a setup-time check).
  • A backend/quantization setting silently ignored for a sub-component.

Prefer failing at setup() time over a deep-in-the-loop crash; prefer a crash over silent garbage. If you truly can't validate, surface a logged warning rather than nothing.

NVIDIA-NeMo/RL/tree/main/.agents/contributor-skills/error-handling commit 3ec5e036d7

Frequently asked questions

npx skillmds@latest add nvidia-nemo-rl/error-handling