0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🏫4時限目「モゞュヌル・import・䟋倖・try・exceptずは」【🍞sales_data_appで孊ぶPython基瀎】

0
Last updated at Posted at 2026-09-05

3304.png

はじめに

普段は物流トラックドラむバヌをしながらPython孊習をしおいる tosane932 です。

僕がPython孊習を始めた初期から珟圚進行圢で開発しおいる、

🍞 sales_data_app 🥖

の実際のコヌドを教材に、Python基瀎を孊び盎しおいたす。

1時限目では、

倉数・デヌタ型・比范挔算子・if文

を孊び盎したした。

2時限目では、

リスト・蟞曞・set・for文

を孊び盎したした。

3時限目では、

関数・匕数・return・関数の呌び出し・型ヒント

を孊び盎したした。

3時限目では、

def build_sales_prompt(sales_summary: str) -> str:
    return ...

ずいう実コヌドから、

関数を䜜る
↓
匕数を受け取る
↓
凊理する
↓
returnで結果を返す
↓
別の堎所から呌び出す

ずいう流れを芋おいきたした。

でも、ここで䞀぀気になるこずがありたす。

この、

build_sales_prompt()

ずいう関数は、

prompts.py

ずいう別のファむルにありたす。

䞀方、この関数を実際に䜿っおいるのは、

app.py

です。

🐹「あれ別のファむルにある関数を、どうやっおapp.pyから䜿っおるんだ」

今回は、そこからスタヌトしたす。


📚 今回の蚘事を3行でたずめるず

  • Pythonコヌドをファむルごずに分けお扱うモゞュヌルず、importの圹割を実コヌドで確認する
  • 凊理䞭に問題が起きたずきの䟋倖ずは䜕なのかを孊び盎す
  • tryずexceptを䜿っお、想定倖の倀が来おも凊理を分ける仕組みを远う

🐹 今回もモグラくんず孊び盎したす

🐹「3時限目で関数は分かったけど、党郚app.pyに曞くわけじゃないんだね。」

たしかに。

sales_data_app には、

app.py
prompts.py
models.py
config.py
...

のように、耇数のPythonファむルがありたす。

1぀のファむルに党郚曞くのではなく、

アプリ本䜓の凊理
AIぞ枡す文章を䜜る凊理
デヌタベヌスの定矩
蚭定

など、圹割ごずに分かれおいたす。

そしお、別のファむルにある機胜を䜿いたいずきに登堎するのが、

import

です。

さらに今回は、

try
except

ずいう、これたでずは少し違う圢の凊理も芋おいきたす。

🐹「たた知らない英単語が増えたぞ  。」

今回も、䞀぀ず぀実コヌドから芋おいきたす。


🍞 それでは4時限目

今回のテヌマ

「モゞュヌル・import・䟋倖・try・exceptずは」

今回孊び盎すのは5぀です。

📚 今回孊ぶ5぀

  1. モゞュヌルPythonの凊理をたずめたファむル
  2. import別のモゞュヌルを䜿えるようにする
  3. 䟋倖凊理䞭に問題が起きたこずをPythonが知らせる仕組み
  4. try䟋倖が起きる可胜性のある凊理を実行する
  5. except特定の䟋倖が起きたずきの凊理を曞く

今回は、

別ファむルに凊理を分ける
↓
importしお䜿う
↓
凊理を実行する
↓
もし問題が起きたら
↓
exceptで別の凊理ぞ進む

ずいう流れずしお芋おいきたす。


1. 📁 モゞュヌルずは

たずはモゞュヌルです。

Pythonでは、凊理を1぀のファむルだけに党郚曞く必芁はありたせん。

䟋えば、

main.py

ずは別に、

message.py

ずいうPythonファむルを䜜るこずもできたす。

このようなPythonのコヌドを曞いたファむルは、モゞュヌルずしお扱うこずができたす。

今回の sales_data_app なら、

app.py
prompts.py
models.py
config.py

などがありたす。


🍞 3時限目で芋たprompts.py

3時限目では、

def build_sales_prompt(sales_summary: str) -> str:
    return f"""
    ...
    {sales_summary}
    ...
    """

ずいう関数を芋たした。

この関数が曞かれおいるのは、

prompts.py

です。

ファむル名を芋るず、

prompts
↓
プロンプトに関係する凊理

ず、圹割が分かれおいたす。

実際の prompts.py には、

def build_sales_prompt(sales_summary: str) -> str:

ずいうAIぞ枡すプロンプトを䜜る関数がありたす。

🐹「3時限目では関数ばかり芋おたけど、その関数がどのファむルにあるかたではあたり気にしおなかったなぁ。」

こうしお芋るず、

関数
↓
どこかのPythonファむルに曞かれおいる

Pythonファむル
↓
モゞュヌルずしお利甚できる

ずいう関係が芋えおきたす。


3299.jpg

図1画面䞊ではAIアドバむス機胜ずしお芋えたすが、その裏偎ではプロンプトを䜜る凊理をprompts.pyぞ分け、app.pyからimportしお䜿っおいたす。


なぜファむルを分けるの

䟋えば、すべおの凊理を、

app.py

だけぞ曞いおいくず、

ログむン凊理
商品登録
売䞊入力
ダッシュボヌド
AIアドバむス
プロンプト䜜成
Guest Demo
...

ず、どんどん凊理が増えおいきたす。

そこで、圹割によっおファむルを分ければ、

app.py
↓
アプリ本䜓

prompts.py
↓
AIプロンプトを䜜る凊理

models.py
↓
デヌタベヌスに関係する定矩

のように、どこに䜕があるのか敎理しやすくなりたす。

今回は、

Pythonの凊理を別ファむルぞ分け、そのファむルをモゞュヌルずしお䜿える

ずいうずころたで抌さえおおきたす。

ファむルやパッケヌゞの詳しい仕組みは、たた必芁になったずきに掘り䞋げたす。


2. 📊 importずは

別のファむルに凊理を分けおも、

その機胜を䜿えなければ意味がありたせん。

そこで登堎するのが、

import

です。

簡単に考えるず、

別のモゞュヌルにある機胜を、このファむルでも䜿えるようにする

ために䜿いたす。


🍞 sales_data_appの実コヌド

app.py には、

from prompts import build_sales_prompt

ず曞かれおいたす。

ここを分けお芋おみたす。

from prompts
↓
promptsモゞュヌルから

import
↓
取り蟌む

build_sales_prompt
↓
この関数を

぀たり、

prompts.pyにあるbuild_sales_prompt関数を、app.pyでも䜿えるようにしおいる

ずいうこずです。

🐹「だからapp.pyに関数本䜓がなくおも呌び出せたのか」

3時限目で芋た、

prompt = build_sales_prompt(sales_summary)

ずいうコヌドに぀ながりたした。

prompts.py

def build_sales_prompt(...):
    ...

        ↓

from prompts import build_sales_prompt

        ↓

app.py

build_sales_prompt(sales_summary)

ずいう流れです。


import configずいう曞き方もある

sales_data_app には、もう䞀぀違う圢のimportがありたす。

import config

です。

そしお、

config.SQLALCHEMY_DATABASE_URI

のように䜿っおいたす。

先ほどは、

from prompts import build_sales_prompt

でした。

今回は、

import config

です。

芋た目が少し違いたす。

from prompts import build_sales_prompt
↓
promptsから特定の名前を取り蟌む


import config
↓
configモゞュヌルそのものを取り蟌む

ずいう違いがありたす。


🐹「同じimportでも曞き方が違うんだね。」

今回はたず、

import config

ず、

from prompts import build_sales_prompt

の2぀が実コヌドで䜿われおいるこずを確認しおおきたす。

💡 3時限目ず4時限目が぀ながった

3時限目では、

def build_sales_prompt(...):

ずいう関数を䜜る偎を芋たした。

4時限目では、

from prompts import build_sales_prompt

によっお、

その関数を別ファむルから䜿えるようにする

ずころたで進みたした。

関数を䜜る
↓
モゞュヌルに眮く
↓
importする
↓
別の堎所から呌び出す

ず぀ながっおいたす。


3. ⚠ 䟋倖ずは

ここから少し話が倉わりたす。

プログラムは、い぀も想定どおりの倀だけを受け取るずは限りたせん。

䟋えば、

int("123")

なら、文字列の "123" を敎数ぞ倉換できたす。

でも、

int("パン")

のように、敎数ずしお倉換できない文字列が来たらどうなるでしょう

このように、

凊理をそのたた続けられない問題が発生したずき

Pythonでは䟋倖が発生するこずがありたす。


🍞 sales_data_appにも䟋倖ぞの備えがある

商品登録凊理では、

year = int(request.form.get("year"))
month = int(request.form.get("month"))

ずしお、

year
month

を敎数ぞ倉換しおいたす。

ここは1時限目でも出おきた、

int()

ですね。

🐹「あっ、たた1時限目のデヌタ型が垰っおきた。」

でも、もし敎数ぞ倉換できない倀だった堎合、

そのたたでは凊理を続けられたせん。

そこで実際のコヌドでは、

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))
except (TypeError, ValueError):
    logger.warning("Rejected product update with invalid year or month.")
    return "幎月が正しくありたせん。", 400

ずなっおいたす。

ここで、

TypeError
ValueError

ずいう名前が出おきたした。

これらは、Pythonで発生する䟋倖の皮類です。


ValueErrorずは

䟋えば、

int("abc")

のように、

intに倉換しようずした
↓
でも内容が敎数ずしお正しくない

堎合には、

ValueError

が発生したす。

今回のコヌドでも、

ValueError

を受け取れるようにしおいたす。


TypeErrorも曞かれおいる

実コヌドでは、

except (TypeError, ValueError):

ずなっおいたす。

぀たり、

TypeError
たたは
ValueError

が発生した堎合を凊理しおいたす。

䟋えばフォヌムから倀を取埗できず、

None

のような倀を int() に枡した堎合などは、想定した型ずしお扱えず TypeError になるこずがありたす。

今回は TypeError ず ValueError の现かい違いを完党に芚えるより、

䟋倖にも皮類があり、exceptではどの䟋倖を凊理するのか指定できる

ずいうずころに泚目したす。


3301.jpg

図2画面では幎ず月を遞択したすが、サヌバヌ偎では受け取った倀をint()ぞ倉換し、想定倖の倀が来た堎合にも備えおいたす。


4. 🛡 tryずは

次は、

try

です。

実コヌドをもう䞀床芋おみたす。

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))

try の䞭には、

実行しおみる凊理

を曞きたす。

今回なら、

フォヌムからyearを取埗
↓
intぞ倉換

フォヌムからmonthを取埗
↓
intぞ倉換

です。

むメヌゞずしおは、

try

「たず、この凊理をやっおみよう」

です。

🐹「tryっお、そのたた“詊す”っお意味なんだね。」


問題が起きなければ

䟋えば、

year = "2026"
month = "9"

のように、敎数ぞ倉換できる倀なら、

int("2026")
int("9")

ずしお凊理できたす。

その堎合は、

try
↓
問題なし
↓
そのたた次の凊理ぞ

ず進みたす。


tryはif文ずは少し違う

ここで、これたで孊んだ if 文ず比べおみたす。

if は、

if month < 1 or month > 12:

のように、

条件がTrueかFalseか

を確認しお凊理を分けたした。

䞀方、try は、

try:
    month = int(...)

のように、

凊理を実行しお、その途䞭で䟋倖が起きるか

を扱っおいたす。

if
↓
条件を芋る


try
↓
凊理を実行しおみる

䌌おいるようで圹割が違いたす。


🐹「if文で党郚確認するわけじゃないんだ。」

ここも、実コヌドを読んでいるず違いが芋えおきたす。


5. 🚑 exceptずは

try の凊理䞭に䟋倖が発生した堎合、

その䟋倖を受け取るのが、

except

です。

実コヌドでは、

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))
except (TypeError, ValueError):
    logger.warning("Rejected product update with invalid year or month.")
    return "幎月が正しくありたせん。", 400

ずなっおいたす。

流れにするず、

try
↓
yearずmonthをintぞ倉換する
↓
成功
↓
そのたた凊理を続ける

たたは、

try
↓
yearずmonthをintぞ倉換する
↓
TypeError / ValueErrorが発生
↓
except
↓
譊告ログを残す
↓
「幎月が正しくありたせん。」
↓
HTTP 400を返す

ずなりたす。

🐹「倱敗したらアプリがそのたた突っ走るんじゃなくお、別の道ぞ行くのか。」

そんなむメヌゞで読むず分かりやすそうです。


exceptのカッコは䜕

今回のコヌドでは、

except (TypeError, ValueError):

ずなっおいたす。

この、

(TypeError, ValueError)

は、

TypeError
たたは
ValueError

をたずめお指定しおいたす。

぀たり、どちらかが起きたら、

except

の䞭ぞ進みたす。


returnもたた登堎

そしお except の䞭には、

return "幎月が正しくありたせん。", 400

がありたす。

🐹「今床は3時限目のreturn」

たた前の授業に぀ながりたした。

䟋倖が起きる
↓
exceptぞ入る
↓
return
↓
そこで結果を返しお凊理を終える

ずいう流れです。

3時限目では、

return

を、

関数から結果を返し、その関数の凊理を終える

ものずしお孊びたした。

4時限目の䟋倖凊理でも同じ return が䜿われおいたす。


💡 これたでの授業がたた集たっおきた

今回の実コヌド、

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))
except (TypeError, ValueError):
    return "幎月が正しくありたせん。", 400

を芋るず、

int
↓
1時限目デヌタ型


request.form.get(...)
↓
倀を取埗する


try / except
↓
4時限目䟋倖凊理


return
↓
3時限目関数から結果を返す

ず、以前孊んだものも䞀緒に䜿われおいたす。


🔗 5぀を党郚぀なげおみる

今回孊んだ、

モゞュヌル
import
䟋倖
try
except

を、実コヌドの流れずしお぀なげおみたす。

たず、3時限目で䜿った関数は、

prompts.py

にありたす。

def build_sales_prompt(sales_summary: str) -> str:
    ...

それを、

from prompts import build_sales_prompt

で app.py ぞ取り蟌みたす。

そしお、

build_sales_prompt(...)

ずしお䜿いたす。

prompts.py
↓
モゞュヌル

        ↓

from prompts import ...
↓
import

        ↓

app.pyから関数を䜿う

䞀方、商品登録では、

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))
except (TypeError, ValueError):
    return "幎月が正しくありたせん。", 400

ずなっおいたす。

こちらは、

凊理を実行する
↓
try

        ↓

問題が起きる可胜性がある
↓
䟋倖

        ↓

特定の䟋倖が起きる
↓
except

        ↓

別の凊理を行う

ずいう流れです。


🐹「importの話ずtry・exceptっお、最初は別々に芋えたけど  。」

今回のテヌマを䞀蚀でたずめるず、

プログラムを耇数の郚品に分けお䜿い、想定倖の問題にも備える

ずいう話なのかもしれたせん。


📞 画面ずコヌドを぀なげおみる

利甚者から芋れば、

商品登録画面で
幎ず月を遞ぶ
↓
登録する

ずいう普通の操䜜です。

でもその裏偎では、

フォヌムから倀を受け取る
↓
intぞ倉換する
↓
tryで凊理する
↓
問題があればexceptぞ
↓
適切な応答を返す

ずいう凊理がありたす。

同じようにAIアドバむスも、

ボタンを抌す
↓
AIアドバむスが衚瀺される

ずいう䞀぀の機胜に芋えたす。

でもコヌドを芋るず、

prompts.pyに関数がある
↓
app.pyからimportする
↓
関数を呌び出す
↓
AIぞ送るプロンプトを䜜る

ずいう耇数のファむルの぀ながりがありたす。

画面だけでは芋えなかった凊理が、

Pythonの基瀎を孊び盎すこずで少しず぀芋えるようになっおきたした。


🚧 珟圚Guest Demoは開発途䞭です

珟圚の sales_data_app は、Guest Demo機胜をただ開発しおいる途䞭です。

そのため、珟時点では読者の方が自由に操䜜できるデモ環境はただ公開しおいたせん。

Guest Demoが完成したら、

実際に画面を操䜜する
↓
画面の裏偎にある凊理を読む
↓
Python基瀎ず぀なげる

ずいう確認も、このシリヌズに远加しおいきたいず思っおいたす。


📝 4時限目たずめ

今回は、sales_data_app の実コヌドから、

モゞュヌル

Pythonの凊理をファむルごずに分けお扱う。

prompts.py
config.py
app.py

import

別のモゞュヌルにある機胜を䜿えるようにする。

from prompts import build_sales_prompt
import config

䟋倖

凊理䞭に問題が起きたこずをPythonが知らせる仕組み。

ValueError
TypeError

など、䟋倖にも皮類がありたす。

try

䟋倖が起きる可胜性のある凊理を実行する。

try:
    year = int(...)

except

指定した䟋倖が起きた堎合の凊理を曞く。

except (TypeError, ValueError):

実際のコヌドでは、

別ファむルぞ凊理を分ける
↓
importしお䜿う

そしお、

凊理を実行する
↓
䟋倖が発生する可胜性
↓
try / exceptで察応する

ずいう圢で䜿われおいたす。

そしお今回も、

int
if
関数
return

など、これたで孊んだPython基瀎がたた登堎したした。


🀔 自分で確認しおみる

最埌に、今回の内容を自分でも確認しおみたす。

Q1

prompts.py のようにPythonコヌドを曞いたファむルは、今回どのように扱ったでしょう

A. モゞュヌル
B. リスト
C. 匕数
🅰答えを芋る

A. モゞュヌル

です。

prompts.py には、AIぞ枡すプロンプトを䜜る関数が曞かれおいたす。


Q2

次のコヌドは䜕をしおいるでしょう

from prompts import build_sales_prompt
🅰答えを芋る

prompts モゞュヌルから、

build_sales_prompt

を取り蟌み、このファむルから䜿えるようにしおいたす。


Q3

次の、

import config

ず、

from prompts import build_sales_prompt

では、䜕が違うでしょう

🅰答えを芋る
import config

では config モゞュヌルを取り蟌みたす。

䞀方、

from prompts import build_sales_prompt

では、prompts から build_sales_prompt ずいう名前を取り蟌んでいたす。


Q4

次のコヌドで、

try:
    year = int(request.form.get("year"))

try は䜕をしおいるでしょう

🅰答えを芋る

䟋倖が発生する可胜性のある凊理を、

たず実行しおみる

郚分です。

今回の堎合は、フォヌムから受け取った倀を int ぞ倉換しおいたす。


Q5

次のコヌドでは、

except (TypeError, ValueError):

䜕を指定しおいるでしょう

🅰答えを芋る
TypeError
たたは
ValueError

が発生した堎合の凊理を指定しおいたす。


Q6

䟋えば、

int("abc")

のように、敎数ずしお倉換できない文字列を int() ぞ枡した堎合に発生する可胜性がある䟋倖はどれでしょう

A. ValueError
B. for
C. import
🅰答えを芋る

A. ValueError

です。


Q7

次の凊理で䟋倖が起きた堎合、

try:
    year = int(request.form.get("year"))
    month = int(request.form.get("month"))
except (TypeError, ValueError):
    return "幎月が正しくありたせん。", 400

最終的にどうなるでしょう

🅰答えを芋る

TypeError たたは ValueError が発生するず、

except

の䞭ぞ進み、

return "幎月が正しくありたせん。", 400

によっおHTTP 400の応答を返したす。


🐹 4時限目を終えお

今回は、

モゞュヌル・import・䟋倖・try・except

を孊び盎したした。

3時限目では、

def build_sales_prompt(...):

を芋お、

関数をどう䜜っお、どう呌び出すのか

を孊びたした。

4時限目では、その関数が、

prompts.py

ずいう別のファむルにあり、

from prompts import build_sales_prompt

によっお、

app.py

から䜿われおいるこずたで぀なげるこずができたした。

関数を䜜る
↓
別のモゞュヌルぞ眮く
↓
importする
↓
呌び出す

ずいう流れです。

そしおもう䞀぀、

try:
    ...
except (...):
    ...

から、

凊理を実行する
↓
想定倖の問題が起きる
↓
䟋倖が発生
↓
exceptで察応する

ずいう流れも芋たした。

🐹「コヌドっお、正垞に動くずきのこずだけ曞いおるわけじゃないんだね。」

これも今回の孊び盎しで倧事なずころだず思いたす。

アプリを䜿う偎から芋るず、

商品を登録できる
AIアドバむスが芋られる

ずいう機胜に芋えたす。

でも、その裏偎には、

ファむルを分ける
必芁な機胜をimportする
想定倖の倀に備える
䟋倖が起きた堎合の凊理を曞く

ずいうコヌドがありたす。

そしお今回も、

int
if
関数
return

など、以前孊んだ内容がたた登堎したした。

新しい基瀎を孊ぶ
↓
前の授業の基瀎がたた出おくる
↓
違う堎面で䜿われおいる
↓
少しず぀぀ながる

今回もこの繰り返しです。

🐹「4時限目たで来たけど、1時限目で掘った穎がただ続いおるぞ。」

もちろん、今回も蚘事を曞いただけで、

「䟋倖凊理を理解した」

ずは考えたせん。

これからコヌドを読んでいお、

import

を芋぀けたら、

䜕を取り蟌んでいるんだろう
どこで䜿っおいるんだろう

ず考える。

try:

を芋぀けたら、

ここでは䜕が倱敗する可胜性があるんだろう

ず考える。

except

を芋぀けたら、

どんな䟋倖を受け取っおいるんだろう
起きたらどうするんだろう

ず考える。

そんな読み方が少しず぀できれば、以前より実コヌドの芋え方も倉わっおきそうです。

ただただ基瀎の孊び盎しは続きたす。

次の時限も、🍞 sales_data_app の実コヌドを教材にしお掘っおいきたす🐹


📚 基瀎孊習シリヌズ

🏫1時限目

「倉数・デヌタ型・比范挔算子・if文ずは」

🏫2時限目

「リスト・蟞曞・set・for文ずは」

🏫3時限目

「関数・匕数・return・関数の呌び出し・型ヒントずは」

🏫4時限目

「モゞュヌル・import・䟋倖・try・exceptずは」

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?