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

如何让Python在进入下一次循环前完成f.summary()与f.get_best()执行

解决方案

首先明确:Python是同步执行的,正常情况下f.summary()和f.get_best()会执行完毕后才进入循环的下一次迭代。你遇到的问题大概率是输出缓冲导致的视觉错觉,或是极端情况下f.fit()未完全释放资源就执行后续方法。以下是针对性解决办法:

1. 确保拟合完全完成

Fitter的fit()是同步方法,但将执行结果赋值给变量可强制程序等待拟合结束:

fit_result = f.fit()

2. 捕获最优分布结果,避免方法静默未执行

把get_best()的返回值保存下来,确保方法执行完毕:

best_dist = f.get_best(method='sumsquare_error')
print(f"{col} 最优分布: {best_dist}")

3. 刷新输出缓冲区,解决视觉延迟

在所有print语句后添加flush=True,确保内容实时显示,避免和后续输出混淆:

print(col, flush=True)

4. 极端情况兜底:检查拟合状态

如果仍存在异常,可通过检查Fitter对象的内部属性确认拟合完成:

f.fit()
# 等待拟合参数生成
while not hasattr(f, 'fitted_param') or f.fitted_param is None:
    time.sleep(0.5)

优化后的完整代码

import numpy as np
import pandas as pd
import seaborn as sns
from fitter import Fitter, get_distributions
from IPython.display import clear_output
import warnings
from pandas.core.common import SettingWithCopyWarning
import time

warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)

dataset = pd.read_csv("econ.csv")

for col in dataset.columns:
    try:
        print(col, flush=True)
        
        spac = dataset[col].values
        f = Fitter(spac, distributions=get_distributions())
        fit_result = f.fit()
        
        # 兜底检查拟合状态
        while not hasattr(f, 'fitted_param') or f.fitted_param is None:
            time.sleep(0.5)
            
        f.summary()
        best_dist = f.get_best(method='sumsquare_error')
        print(f"{col} 最优分布: {best_dist}", flush=True)
        print("-"*50, flush=True)
        
    except Exception as e:
        print(f"处理列 {col} 出错: {str(e)}", flush=True)
        continue

关键调整说明

  • 移除了重复的import语句
  • 替换空except:为捕获具体异常,方便排查问题
  • 所有输出添加flush=True,避免视觉上的"未执行完成"错觉
  • 通过捕获返回值+属性检查,强制程序等待关键步骤完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:05:29