こんにちは、JS2IIUです。
エラー発生時の適切な処理とユーザーへのフィードバックは使いやすいUIを構成するのに不可欠です。今回もよろしくお願いします。
1. はじめに
StreamlitはPythonで手軽にWebアプリを作れる便利なライブラリです。しかし、アプリを公開した際にエラーが発生すると、アプリが止まってしまったり、ユーザーにとってわかりにくいエラー画面が表示されたりすることがあります。
本記事では、Streamlitでエラーが発生したときに、アプリが止まらないようにする方法や、ユーザーにわかりやすくフィードバックする方法について解説します。
2. エラーが起きるとどうなる?(未対策の例)
まずは、Streamlitでエラーハンドリングを行っていない状態で、エラーが発生した場合を見てみましょう。
📌 例:除算処理で0割が発生するケース
以下は、Streamlit上で数値を入力し、割り算の結果を表示するアプリです。
import streamlit as st
st.title("除算アプリ")
x = st.number_input("分子を入力してください", value=10)
y = st.number_input("分母を入力してください", value=0)
result = x / y # ここで ZeroDivisionError が発生!
st.write(f"結果: {result}")このコードを実行すると、分母が 0 のため、ZeroDivisionError(ゼロ除算エラー)が発生し、アプリは次のようなエラーメッセージを表示して停止してしまいます。
❌ ユーザーにとっての問題点
- エラーの意味がわからない
- アプリの処理が止まってしまう
- どこを直せばよいのかヒントがない
このような状態では、ユーザーにとって使いにくいアプリになってしまいます。
3. try-exceptで基本的なエラーハンドリングを行う
Pythonでは、エラーが発生しそうな処理を try-except 文で囲むことで、エラーをキャッチしてアプリのクラッシュを防ぐことができます。
✅ エラーハンドリングを追加したコード
import streamlit as st
st.title("除算アプリ(エラーハンドリング付き)")
x = st.number_input("分子を入力してください", value=10)
y = st.number_input("分母を入力してください", value=0)
try:
result = x / y
st.write(f"結果: {result}")
except ZeroDivisionError:
st.error("⚠️ 0で割ることはできません。分母を変更してください。")🔍 解説
tryブロック内で割り算を実行します。except ZeroDivisionError:でゼロ除算エラーが起きた場合に、st.error()を使ってエラーメッセージを表示します。- アプリはクラッシュせず、ユーザーに優しくエラーを伝えられます。
🧠 補足:Streamlitのエラーメッセージ関数
| 関数 | 説明 |
|---|---|
st.error("メッセージ") | エラー表示(赤色) |
st.warning("メッセージ") | 注意表示(黄色) |
st.info("メッセージ") | 情報表示(青色) |
4. 関数化した処理でのエラーハンドリング
より実践的な場面では、処理を関数としてまとめることがよくあります。以下は、CSVファイルを読み込む関数の例です。
📄 例:CSVファイルを読み込むアプリ
import streamlit as st
import pandas as pd
st.title("CSVファイル読み込みアプリ")
uploaded_file = st.file_uploader("CSVファイルを選択してください", type="csv")
def load_csv(file):
try:
df = pd.read_csv(file)
return df
except Exception as e:
st.error(f"ファイルの読み込みに失敗しました。エラー内容: {e}")
return None
if uploaded_file is not None:
df = load_csv(uploaded_file)
if df is not None:
st.dataframe(df)🔍 解説
load_csv関数でファイル読み込み処理を行い、try-exceptでエラーを捕捉します。pandas.read_csv()で何らかのエラーが出た場合でも、アプリが止まらずエラーメッセージが表示されます。st.dataframe()で正常に読み込めたデータを表示します。
5. 開発中はst.exceptionで詳細なデバッグも可能
開発中には、エラーの詳細情報(トレースバック)を表示して原因を特定したい場合があります。そんなときは st.exception() が便利です。
🔧 例:開発者向けのエラー詳細表示
try:
# ここに処理
except Exception as e:
st.exception(e) # エラーの詳細を表示(トレースバック付き)st.exception() は、Pythonの標準的なエラーメッセージをそのままStreamlitアプリ上に表示してくれるので、デバッグ用に最適です。
6. よくあるエラーとその対処例
| エラー名 | 主な原因 | 対処法 |
|---|---|---|
ZeroDivisionError | 0で割っている | 入力値をチェック or try-exceptで捕捉 |
FileNotFoundError | ファイルが見つからない | パスの確認 or ファイルアップロード機能を使う |
ValueError | 不正な値 | 入力前に検証(バリデーション)する |
TypeError | 型が合っていない | 型の確認と変換 |
7. ユーザー体験を向上させるヒント
- エラーを事前に防ぐUI設計
例:分母の初期値を1にするなど、ユーザーがミスをしにくい設計に。 - 入力値を検証する(バリデーション)
例:分母が0でないかチェックしてから計算を実行。 - わかりやすいフィードバックを表示する
「〇〇を入力してください」「形式が違います」など、次の行動を案内。
8. まとめ
- Streamlitでは、
try-exceptを使うことでエラーによるアプリ停止を防げます。 st.error()などの表示関数でユーザーに優しく伝えることが大切です。st.exception()を使えば、開発時のデバッグもスムーズになります。- ユーザーにとって安心できるUI/UX設計を意識しましょう。


コメント