TheAlgorithms/Python · error · ValueError
number of qubits must be > 0.
Error message
number of qubits must be > 0.
What it means
Raised by quantum_fourier_transform() in quantum/q_fourier_transform.py when number_of_qubits <= 0. A QFT circuit needs at least one qubit; zero or negative counts make QuantumRegister construction invalid and the Hadamard/control loop (which iterates range(counter)) meaningless, so the guard rejects them with ValueError.
Source
Thrown at quantum/q_fourier_transform.py:61
...
ValueError: number of qubits must be > 0.
>>> quantum_fourier_transform('a')
Traceback (most recent call last):
...
TypeError: number of qubits must be a integer.
>>> quantum_fourier_transform(100)
Traceback (most recent call last):
...
ValueError: number of qubits too large to simulate(>10).
>>> quantum_fourier_transform(0.5)
Traceback (most recent call last):
...
ValueError: number of qubits must be exact integer.
"""
if isinstance(number_of_qubits, str):
raise TypeError("number of qubits must be a integer.")
if number_of_qubits <= 0:
raise ValueError("number of qubits must be > 0.")
if math.floor(number_of_qubits) != number_of_qubits:
raise ValueError("number of qubits must be exact integer.")
if number_of_qubits > 10:
raise ValueError("number of qubits too large to simulate(>10).")
qr = QuantumRegister(number_of_qubits, "qr")
cr = ClassicalRegister(number_of_qubits, "cr")
quantum_circuit = QuantumCircuit(qr, cr)
counter = number_of_qubits
for i in range(counter):
quantum_circuit.h(number_of_qubits - i - 1)
counter -= 1
for j in range(counter):
quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter)
View on GitHub (pinned to f5988cc097)
Solutions
- Pass a positive integer count (1..10 for simulatable sizes).
- Validate at the source: if nq <= 0: reject in the UI/config layer.
- Clamp computed sizes: nq = max(1, total - reserved) if a zero count is a bug.
Example fix
# before
nq = data_qubits - ancilla # can be 0
quantum_fourier_transform(nq)
# after
if nq <= 0:
raise ValueError(f"need at least 1 qubit, got {nq}")
quantum_fourier_transform(nq) Defensive patterns
Strategy: validation
Validate before calling
if not isinstance(number_of_qubits, (int, float)) or number_of_qubits <= 0:
raise ValueError(f"number_of_qubits must be positive, got {number_of_qubits!r}")
quantum_fourier_transform(number_of_qubits) Type guard
def is_positive_qubit_count(value) -> bool:
return isinstance(value, (int, float)) and value > 0 Try / catch
try:
qc = quantum_fourier_transform(nq)
except ValueError as e:
if "must be > 0" in str(e):
raise ConfigError("qubit count must be at least 1") from e
raise Prevention
- Guard computed register sizes (total - reserved) against collapsing to 0.
- Set min=1 in UI/config schemas for qubit count.
- Remember the simulatable cap is 10; values 1-10 are the practical range.
When it happens
Trigger: quantum_fourier_transform(0), quantum_fourier_transform(-2), quantum_fourier_transform(-0.5). Note a float like 0.5 passes this check but fails the next one (exact-integer check).
Common situations: Computed register sizes that hit 0 (e.g. num_qubits = total - reserved with reserved >= total); user form input defaulting to 0; parameter sweeps starting at 0.
Related errors
- surface_area_cube() only accepts non-negative values
- surface_area_cuboid() only accepts non-negative values
- surface_area_sphere() only accepts non-negative values
- surface_area_hemisphere() only accepts non-negative values
- surface_area_cone() only accepts non-negative values
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/aed3a34888721f39.
Report an issue: GitHub.