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

如何使用scipy.spatial ConvexHull屏蔽Qhull的Killing degenerate triangle信息

屏蔽Qhull的"Killing degenerate triangle"输出信息的方法

以下是几种可行的解决思路:

1. 使用Qhull内置的静默选项

直接在qhull_options中添加Qq参数,该参数会抑制Qhull的状态类输出信息,包括"Killing degenerate triangle":

from scipy.spatial import ConvexHull

hull = ConvexHull(coordinates, qhull_options="QJ Qq")

这是最精准的方案,直接从Qhull层面关闭冗余输出,不会影响其他程序的标准输出。

2. 临时重定向标准输出

如果Qhull的静默选项无效,可以通过Python临时拦截stdout输出,执行完凸包计算后再恢复:

基础实现

import sys
from scipy.spatial import ConvexHull

# 保存原始stdout
original_stdout = sys.stdout
# 跨平台重定向到空设备(Linux/macOS用/dev/null,Windows用nul)
null_device = '/dev/null' if sys.platform != 'win32' else 'nul'
sys.stdout = open(null_device, 'w')

try:
    hull = ConvexHull(coordinates, qhull_options="QJ")
finally:
    # 恢复原始输出流
    sys.stdout.close()
    sys.stdout = original_stdout

优雅的上下文管理器封装

可以封装成上下文管理器,方便重复使用:

import sys
from io import StringIO
from contextlib import contextmanager
from scipy.spatial import ConvexHull

@contextmanager
def suppress_stdout():
    original_stdout = sys.stdout
    sys.stdout = StringIO()
    try:
        yield
    finally:
        sys.stdout = original_stdout

# 使用示例
with suppress_stdout():
    hull = ConvexHull(coordinates, qhull_options="QJ")

说明

这类输出不属于Python的警告或QhullError异常,是Qhull底层程序直接打印到标准输出的状态信息,因此捕获Python警告、处理异常的方法无效,必须从输出流拦截或Qhull参数配置入手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:45:03