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

Streamlit AssertionError:无法匹配2个标题与1张图片的排查与解决

问题

基于pm4py、pandas和Streamlit搭建流程挖掘仪表板,实现侧边栏下拉选择展示BPMN或Petri网可视化图片,编写代码如下:

import pm4py
import pandas as pd
import streamlit as st
import graphviz

st.set_page_config(page_title="Process Mining dashboard", page_icon=":chart_with_downwards_trend:", layout="wide")

file_path = r'path/to/file.csv'
event_log = pd.read_csv(file_path, sep=';')

df = pm4py.format_dataframe(event_log, case_id = 'case_id', activity_key = 'activity', timestamp_key = 'timestamp', 
                                   timest_format = '%Y-%m-%d %H:%M:%S%z')

pm_image = st.container()

bpmn_model = pm4py.discover_bpmn_inductive(df)
bpmn = 'bpmn.png'
pm4py.save_vis_bpmn(bpmn_model, bpmn)

pn, im, fm = pm4py.discover_petri_net_inductive(df)
petri = 'petri.png'
pm4py.save_vis_petri_net(pn, im, fm, petri)

images = {
            'bpmn': bpmn,
            'petri': petri
}

img = st.sidebar.selectbox("Select the visualization of the process.", list(images.keys()))
                             

with pm_image:
     st.image(images[img], caption=list(images.keys()))

运行代码时抛出错误:

AssertionError: Cannot pair 2 captions with 1 images.

需求是通过下拉菜单关联st.image组件展示选中的可视化图片,目前下拉菜单正常显示,但无法展示图片,需解决该问题。

解决方案

错误原因

st.image的caption参数传入了list(images.keys())(包含bpmn和petri两个元素),但当前仅传入了一张图片路径images[img],图片数量和标题数量不匹配,导致断言错误。

修改后的代码

import pm4py
import pandas as pd
import streamlit as st
import graphviz

st.set_page_config(page_title="Process Mining dashboard", page_icon=":chart_with_downwards_trend:", layout="wide")

file_path = r'path/to/file.csv'
event_log = pd.read_csv(file_path, sep=';')

df = pm4py.format_dataframe(event_log, case_id = 'case_id', activity_key = 'activity', timestamp_key = 'timestamp', 
                                   timest_format = '%Y-%m-%d %H:%M:%S%z')

pm_image = st.container()

bpmn_model = pm4py.discover_bpmn_inductive(df)
bpmn = 'bpmn.png'
pm4py.save_vis_bpmn(bpmn_model, bpmn)

pn, im, fm = pm4py.discover_petri_net_inductive(df)
petri = 'petri.png'
pm4py.save_vis_petri_net(pn, im, fm, petri)

images = {
            'bpmn': bpmn,
            'petri': petri
}

img = st.sidebar.selectbox("Select the visualization of the process.", list(images.keys()))
                             

with pm_image:
     # 将caption改为当前选中的选项,保证图片和标题数量匹配
     st.image(images[img], caption=img)

关键修改点

把st.image的caption参数从list(images.keys())替换为img,img是用户从下拉菜单选中的选项,这样单张图片对应单个标题,参数匹配即可正常展示选中的可视化图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:15:24