{"record":{"id":"80387b9d4a39602c","repo":"TheAlgorithms/Python","slug":"number-of-qubits-must-be-a-integer","errorCode":null,"errorMessage":"number of qubits must be a integer.","messagePattern":"number of qubits must be a integer\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"quantum/q_fourier_transform.py","lineNumber":59,"sourceCode":"    >>> quantum_fourier_transform(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits must be > 0.\n    >>> quantum_fourier_transform('a')\n    Traceback (most recent call last):\n        ...\n    TypeError: number of qubits must be a integer.\n    >>> quantum_fourier_transform(100)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits too large to simulate(>10).\n    >>> quantum_fourier_transform(0.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits must be exact integer.\n    \"\"\"\n    if isinstance(number_of_qubits, str):\n        raise TypeError(\"number of qubits must be a integer.\")\n    if number_of_qubits <= 0:\n        raise ValueError(\"number of qubits must be > 0.\")\n    if math.floor(number_of_qubits) != number_of_qubits:\n        raise ValueError(\"number of qubits must be exact integer.\")\n    if number_of_qubits > 10:\n        raise ValueError(\"number of qubits too large to simulate(>10).\")\n\n    qr = QuantumRegister(number_of_qubits, \"qr\")\n    cr = ClassicalRegister(number_of_qubits, \"cr\")\n\n    quantum_circuit = QuantumCircuit(qr, cr)\n\n    counter = number_of_qubits\n\n    for i in range(counter):\n        quantum_circuit.h(number_of_qubits - i - 1)\n        counter -= 1\n        for j in range(counter):","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/quantum/q_fourier_transform.py#L41-L77","documentation":"Raised by quantum_fourier_transform() in quantum/q_fourier_transform.py when number_of_qubits is a str. The guard exists because string input (e.g. \"3\") would otherwise fail later comparisons with a confusing TypeError; only the str type is singled out here, other non-numeric types fall through to the <= comparison and raise Python's own TypeError.","triggerScenarios":"quantum_fourier_transform(\"3\"), quantum_fourier_transform(\"ten\"). Any value arriving as text from CLI args, config files, or HTTP query parameters without conversion.","commonSituations":"argparse without type=int; YAML/JSON config values quoted as strings; REST endpoints passing query params as strings into the function.","solutions":["Pass a numeric value: quantum_fourier_transform(3).","Convert string inputs before calling: int(num_qubits_str) (with its own error handling).","Use argparse type=int or pydantic/FastAPI int annotations to coerce at the boundary."],"exampleFix":"# before\nnq = request.args.get('qubits')  # \"3\"\nquantum_fourier_transform(nq)  # TypeError\n\n# after\nnq = int(request.args.get('qubits'))\nquantum_fourier_transform(nq)","handlingStrategy":"type-guard","validationCode":"if isinstance(number_of_qubits, str):\n    number_of_qubits = int(number_of_qubits)  # let ValueError propagate on bad text\nquantum_fourier_transform(number_of_qubits)","typeGuard":"def is_numeric_qubit_count(value) -> bool:\n    return not isinstance(value, str) and isinstance(value, (int, float))","tryCatchPattern":"try:\n    qc = quantum_fourier_transform(nq)\nexcept TypeError as e:\n    if \"must be a integer\" in str(e):\n        qc = quantum_fourier_transform(int(nq))\n    else:\n        raise","preventionTips":["Coerce string inputs (CLI, HTTP params) to int at the boundary.","Use argparse type=int or typed schema validation for qubit counts.","Only str is special-cased; other bad types raise Python's own comparison TypeError."],"tags":["quantum","typeerror","type-check","input-validation"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}