TheAlgorithms/Python · error · ValueError
area_triangle_three_sides() only accepts non-negative values
Error message
area_triangle_three_sides() only accepts non-negative values
What it means
area_triangle_three_sides() raises this ValueError when side1, side2, or side3 is negative. The function implements Heron's formula and first validates that all side lengths are non-negative. A negative side would make the expression under sqrt() meaningless, so the library rejects it before the separate triangle-inequality check.
Source
Thrown at maths/area.py:350
>>> area_triangle_three_sides(1, -2, 1)
Traceback (most recent call last):
...
ValueError: area_triangle_three_sides() only accepts non-negative values
>>> area_triangle_three_sides(2, 4, 7)
Traceback (most recent call last):
...
ValueError: Given three sides do not form a triangle
>>> area_triangle_three_sides(2, 7, 4)
Traceback (most recent call last):
...
ValueError: Given three sides do not form a triangle
>>> area_triangle_three_sides(7, 2, 4)
Traceback (most recent call last):
...
ValueError: Given three sides do not form a triangle
"""
if side1 < 0 or side2 < 0 or side3 < 0:
raise ValueError("area_triangle_three_sides() only accepts non-negative values")
elif side1 + side2 < side3 or side1 + side3 < side2 or side2 + side3 < side1:
raise ValueError("Given three sides do not form a triangle")
semi_perimeter = (side1 + side2 + side3) / 2
area = sqrt(
semi_perimeter
* (semi_perimeter - side1)
* (semi_perimeter - side2)
* (semi_perimeter - side3)
)
return area
def area_parallelogram(base: float, height: float) -> float:
"""
Calculate the area of a parallelogram.
>>> area_parallelogram(10, 20)
200
View on GitHub (pinned to f5988cc097)
Solutions
- Validate all three sides >= 0 before the call; fix the negative value at its source.
- If sides are distances, ensure the distance routine returns abs() values.
- Filter/clean datasets to drop or repair negative side lengths.
- Catch ValueError and distinguish it from the triangle-inequality error for clearer diagnostics.
Example fix
// before
area = area_triangle_three_sides(a, b, c) # a may be -1
# after
if a < 0 or b < 0 or c < 0:
raise ValueError(f'sides must be non-negative: {a}, {b}, {c}')
area = area_triangle_three_sides(a, b, c) Defensive patterns
Strategy: validation
Validate before calling
if side1 < 0 or side2 < 0 or side3 < 0:
raise ValueError(f'sides must be non-negative: {side1}, {side2}, {side3}')
area = area_triangle_three_sides(side1, side2, side3) Type guard
def has_non_negative_sides(sides: tuple) -> bool:
return all(s >= 0 for s in sides) Try / catch
try:
area = area_triangle_three_sides(a, b, c)
except ValueError as e:
raise ValueError(f'invalid triangle sides {(a, b, c)}: {e}') from e Prevention
- Distance routines should always return non-negative values; check yours.
- Sanitize generated test data ranges to exclude negative sides.
When it happens
Trigger: Calling area_triangle_three_sides(side1, side2, side3) with any argument < 0, e.g. area_triangle_three_sides(-1, 2, 4). The negativity check runs first, so a negative side raises this error even if the sides would otherwise violate the triangle inequality too.
Common situations: Side lengths from sensor measurements with sign glitches; distances computed via dot products that can be negative; test data generated over ranges that include negatives.
Related errors
- Given three sides do not form a triangle
- 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
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/599f21b7020cc4fa.
Report an issue: GitHub.