{"record":{"id":"5fecaf7851320799","repo":"TheAlgorithms/Python","slug":"electron-concentration-cannot-be-negative","errorCode":null,"errorMessage":"Electron concentration cannot be negative","messagePattern":"Electron concentration cannot be negative","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"electronics/electric_conductivity.py","lineNumber":50,"sourceCode":"    >>> electric_conductivity(conductivity=50, electron_conc=0, mobility=-10)\n    Traceback (most recent call last):\n        ...\n    ValueError: mobility cannot be negative\n    >>> electric_conductivity(conductivity=50, electron_conc=0, mobility=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: You cannot supply more or less than 2 values\n    >>> electric_conductivity(conductivity=50, electron_conc=200, mobility=300)\n    Traceback (most recent call last):\n        ...\n    ValueError: You cannot supply more or less than 2 values\n    \"\"\"\n    if (conductivity, electron_conc, mobility).count(0) != 1:\n        raise ValueError(\"You cannot supply more or less than 2 values\")\n    elif conductivity < 0:\n        raise ValueError(\"Conductivity cannot be negative\")\n    elif electron_conc < 0:\n        raise ValueError(\"Electron concentration cannot be negative\")\n    elif mobility < 0:\n        raise ValueError(\"mobility cannot be negative\")\n    elif conductivity == 0:\n        return (\n            \"conductivity\",\n            mobility * electron_conc * ELECTRON_CHARGE,\n        )\n    elif electron_conc == 0:\n        return (\n            \"electron_conc\",\n            conductivity / (mobility * ELECTRON_CHARGE),\n        )\n    else:\n        return (\n            \"mobility\",\n            conductivity / (electron_conc * ELECTRON_CHARGE),\n        )\n","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/electronics/electric_conductivity.py#L32-L68","documentation":"Thrown by electric_conductivity() when electron_conc < 0 while exactly one argument is 0. Electron concentration is a per-volume count and cannot be negative; the guard runs before the solver branch that divides by (mobility * ELECTRON_CHARGE).","triggerScenarios":"electric_conductivity(conductivity=50, electron_conc=-200, mobility=0) — one zero but negative electron concentration.","commonSituations":"Charge-carrier bookkeeping where electrons were tracked with a negative sign by convention; noisy sensor data; doping calculations with operands swapped (N_D - N_A reversed).","solutions":["Pass the magnitude of the electron concentration as a non-negative number.","If your codebase signs carriers by polarity, strip the sign at the boundary: abs(n).","Mark the unknown with 0 rather than any placeholder value."],"exampleFix":"# before\nelectric_conductivity(conductivity=50, electron_conc=-200, mobility=0)\n\n# after\nelectric_conductivity(conductivity=50, electron_conc=abs(carrier_density), mobility=0)","handlingStrategy":"validation","validationCode":"n = abs(carrier_density) if signed_convention else carrier_density\nif n < 0:\n    raise ValueError(\"electron_conc must be >= 0\")\nname, value = electric_conductivity(conductivity, n, mobility)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Strip carrier-sign conventions at the boundary when magnitudes are required.","Validate doping arithmetic (N_D - N_A) order."],"tags":["electronics","semiconductor","physics","validation","sign-error"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}