TheAlgorithms/Python · error · ValueError
Intrinsic concentration cannot be negative in a semiconducto
Error message
Intrinsic concentration cannot be negative in a semiconductor
What it means
Thrown by carrier_concentration() when intrinsic_conc < 0 while exactly one argument is 0. The intrinsic (thermal equilibrium) carrier concentration ni is a positive material property (e.g. ~1e10 cm^-3 for silicon at 300 K); a negative value is non-physical and is rejected before ni^2 is used.
Source
Thrown at electronics/carrier_concentration.py:50
...
ValueError: Electron concentration cannot be negative in a semiconductor
>>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200)
Traceback (most recent call last):
...
ValueError: Hole concentration cannot be negative in a semiconductor
>>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200)
Traceback (most recent call last):
...
ValueError: Intrinsic concentration cannot be negative in a semiconductor
"""
if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1:
raise ValueError("You cannot supply more or less than 2 values")
elif electron_conc < 0:
raise ValueError("Electron concentration cannot be negative in a semiconductor")
elif hole_conc < 0:
raise ValueError("Hole concentration cannot be negative in a semiconductor")
elif intrinsic_conc < 0:
raise ValueError(
"Intrinsic concentration cannot be negative in a semiconductor"
)
elif electron_conc == 0:
return (
"electron_conc",
intrinsic_conc**2 / hole_conc,
)
elif hole_conc == 0:
return (
"hole_conc",
intrinsic_conc**2 / electron_conc,
)
elif intrinsic_conc == 0:
return (
"intrinsic_conc",
(electron_conc * hole_conc) ** 0.5,
)
else:View on GitHub (pinned to f5988cc097)
Solutions
- Supply a positive intrinsic concentration (use ni ≈ 1e10 cm^-3 for Si at 300 K if unsure).
- If ni comes from a temperature model, validate the temperature range before computing it.
- Treat negative ni as invalid input data and fail early in your own pipeline.
Example fix
# before carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200) # after carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=1200)
Defensive patterns
Strategy: validation
Validate before calling
if intrinsic_conc <= 0:
raise ValueError("intrinsic_conc must be positive (Si@300K ~ 1e10 cm^-3)")
result = carrier_concentration(electron_conc, hole_conc, intrinsic_conc) Prevention
- Validate ni against the temperature range of its source model.
- Keep a table of positive ni values per material instead of computing ad hoc.
When it happens
Trigger: carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200) — exactly one zero but negative intrinsic concentration.
Common situations: Temperature-dependent ni lookups returning negative garbage on out-of-range temperatures; tabulated data with missing values encoded as negatives; manual entry typos.
Related errors
- Electron concentration cannot be negative in a semiconductor
- Hole concentration cannot be negative in a semiconductor
- Conductivity cannot be negative
- Electron concentration cannot be negative
- mobility cannot be negative
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/6b22267cba1575f6.
Report an issue: GitHub.