You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python assert校验多边形面积<500ha时超阈值仍通过问题排查

问题根因

你遇到的打印面积超标但断言不触发的问题,来自两个低级代码错误:

  • 变量名写错:投影后得到的正确面积对象是geom_area,你打印公顷数时直接用geom_area.area算出了正确结果,但给total_area赋值时错用了未在当前逻辑中定义的poly_area变量,total_area存的根本不是当前多边形的面积。
  • 测试逻辑完全和计算逻辑脱钩:面积计算写在全局作用域,测试函数直接读全局的total_area,根本没有在测试流程里传入你准备的超标测试数据重新计算面积。只要之前运行过的逻辑给全局的poly_area赋过小于500的对应值,total_area就会一直是小于500的数,不管你传什么测试数据,断言都能通过——你看到的打印输出是对的,是因为打印语句没用到写错的total_area变量,直接算了正确值而已。
修复代码

把面积计算封装成独立函数,测试时传入对应测试数据实时计算结果,彻底去掉全局变量依赖,同时修正变量名错误:

from itertools import chain
from shapely.geometry import Polygon
from shapely.ops import transform
from functools import partial
import pyproj

def get_polygon_area_ha(feature):
    geom = feature['geometry']['coordinates']
    polygon = Polygon(list(chain(*geom)))
    projected_poly = transform(
        partial(
            pyproj.transform,
            pyproj.Proj(init='EPSG:4326'),
            pyproj.Proj(
                proj='aea',
                lat_1=polygon.bounds[1],
                lat_2=polygon.bounds[3]
            )
        ),
        polygon)
    # 平方米转公顷(1公顷=10000平方米),保留1位小数
    return round(projected_poly.area / 10000, 1)

def test_area_max_500_ha():
    # 替换为你的超标测试feature数据
    test_feature = {} 
    area_ha = get_polygon_area_ha(test_feature)
    print(f"实测多边形面积:{area_ha}公顷")
    assert area_ha < 500

额外提醒:写测试用例不要依赖全局变量存储计算结果,测试框架的用例执行顺序不固定,全局变量很容易被其他逻辑污染,导致测试结果完全不可信。

内容的提问来源于stack exchange,提问作者Where_am_I

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:45:59