TheAlgorithms/Python · error · ValueError
Given three sides do not form a triangle
Error message
Given three sides do not form a triangle
What it means
area_triangle_three_sides() raises this ValueError when the three sides violate the triangle inequality: each side must be shorter than the sum of the other two (side1+side2 >= side3 and permutations). Heron's formula requires a realizable triangle; otherwise the value under sqrt() would be negative. Degenerate triangles where one side exactly equals the sum of the others are accepted (area 0).
Source
Thrown at maths/area.py:352
...
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
>>> area_parallelogram(1.6, 2.6)
4.16
View on GitHub (pinned to f5988cc097)
Solutions
- Check the triangle inequality before calling: a+b >= c and a+c >= b and b+c >= a.
- Fix the typo/data-entry error in the offending side length.
- For near-degenerate cases with floats, compare against a small epsilon tolerance instead of exact inequality.
- Catch ValueError and tell the user which side is inconsistent.
Example fix
// before
area = area_triangle_three_sides(a, b, c)
# after
if a + b < c or a + c < b or b + c < a:
raise ValueError(f'{a}, {b}, {c} do not form a triangle')
area = area_triangle_three_sides(a, b, c) Defensive patterns
Strategy: validation
Validate before calling
EPS = 1e-12
if side1 + side2 < side3 - EPS or side1 + side3 < side2 - EPS or side2 + side3 < side1 - EPS:
raise ValueError(f'sides {side1}, {side2}, {side3} do not satisfy the triangle inequality')
area = area_triangle_three_sides(side1, side2, side3) Type guard
def is_valid_triangle(a: float, b: float, c: float) -> bool:
return a + b >= c and a + c >= b and b + c >= a Try / catch
try:
area = area_triangle_three_sides(a, b, c)
except ValueError as e:
if 'do not form a triangle' in str(e):
raise ValueError(f'measurement error: sides {(a, b, c)} are inconsistent') from e
raise Prevention
- Validate the triangle inequality yourself with an epsilon for float data.
- Use triangle-valid generation (e.g. sample two angles) when fuzzing.
- Treat this error as a strong typo signal in user-entered side lengths.
When it happens
Trigger: Calling area_triangle_three_sides(a, b, c) with any side longer than the sum of the other two, e.g. area_triangle_three_sides(2, 7, 4) (2+4 < 7), area_triangle_three_sides(7, 2, 4), or area_triangle_three_sides(1, 2, 3) permutations with strict violation. Note 1,2,3 is degenerate-equal and passes.
Common situations: Random-generated side lengths in tests/fuzzing that mostly don't form triangles; user-entered measurements with typos (e.g. 70 instead of 7); floating-point rounding making a nearly-degenerate triangle strictly violate the inequality.
Related errors
- area_triangle_three_sides() only accepts non-negative values
- 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/fb70f562a0a56b1d.
Report an issue: GitHub.