
IPアドレスはネットワークに接続するPCやスマートフォンに割り当てられる識別番号で、世界にひとつだけでありどこからでもデータ送受信ができるグローバルIPアドレスと、ローカルネットワーク内で用いられるプライベートIPアドレスがあります。
このうちプライベートIPアドレスでは「192.168.x.x」というIPアドレスがよく用いられますが、一体なぜ「192.168.x.x」が用いられるようになったのかについて、Q&AサービスのStack Exchangeで説明されています。
IPアドレスなどを含む通信プロトコルのインターネット・プロトコル・スイート(TCP/IP)は、インターネット技術特別調査委員会(IETF)という標準化団体によって議論・推進されています。
IETFは標準的な仕様を記した文書・Request for Comments(RFC)を公開しており、この中では「192.168.00」~「192.168.255.255」がプライベートIPアドレス範囲として割り当てられています。
1994年に公開された「RFC 1597」を確認すると、プライベートIPアドレス範囲は「10.0.0.0」~「10.255.255.255」、「172.16.0.0」~「172.31.255.255」、「192.168.0.0」~「192.168.255.255」という3つの範囲に割り当てられていることがわかります。
なぜ「192.168.x.x」がプライベートIPアドレスの標準として選ばれたのかという質問に対し、あるユーザーはかつてIPアドレスなどのインターネット資源を管理していたプロジェクトグループ・Internet Assigned Numbers Authority(IANA)が関係していたと回答しています。
IANAは1972年、南カリフォルニア大学情報科学研究所のジョン・ポステル教授が中心となって設立され、ポステル教授は1998年に亡くなるまでIANAの仕事を率先して引き受けていました。
「RFC 1597」に対する反論が含まれている「RFC 1627」では、IANAがプライベートIPアドレス範囲の割り当てを行ったと言及されています。これによるとIANA、つまりポステル教授はコミュニティのレビューと承認を得ることなく割り当てを行ったそうです。
また、インターネットの歴史について議論するフォーラムのInternet-historyでは、あるネットワーク企業はIANAの割り当てが行われる以前から、「192.168.x.x」というIPアドレスを例としてネットワーク機器の説明書に記していたと報告されています。
多くのユーザーがこの説明書に従って内部ネットワークを設定した結果、IANAの割り当て前からすでに相当数のプライベートネットワークで「192.168.x.x」が使われていたため、RFC 1597が採択された際にこのIPアドレスがプライベートIPアドレス範囲に割り当てられたとのことです。
⇧ なるほど、結局のところ、よく分かっていないと。真相は藪の中といったところでしょうか...
「Virtualbox」とかでも、
⇧ 各々の「ネットワークアダプター」の「IPアドレス」の「範囲」が整理されていなかったり、「ネットワーク」周りの情報って整理されていないんよな...
そりゃあ、設定周りの誤設定で障害が起こっても文句は言えんわな...
Pythonの例外も捕捉しなければ呼び出し元に伝播されていくで良かったっけ?
「Java」だと、
⇧ 上記サイト様にありますように、「例外」は「catch句」で捕捉しなければ呼び出し元に伝播されていくようなのだが、「Python」の場合ってどういう挙動になるんだっけ?と思ったので調べてみました。
ネットの情報を漁っていたところ、
⇧ 上記サイト様で解説してくれており、「Java」と同様に「Python」においても「例外」は伝播されていく挙動になるで良いようです。
ちなみに、
⇧ 公式のドキュメントには、複数のメソッドが呼び出される場合の「例外」の挙動についての言及が無いので、「例外」が伝播されていくという挙動が説明されていないのよね...
試してみた。
■Pythonプロジェクト構成
D:\work-soft\python\exception_propagation
├─.venv
│ │ .gitignore
│ │ pyvenv.cfg
│ │
│ ├─Include
│ ├─Lib
│ │ └─site-packages
│ │ ├─pip
...省略
│ └─Scripts
│ activate
│ activate.bat
│ activate.fish
│ Activate.ps1
│ deactivate.bat
│ pip.exe
│ pip3.13.exe
│ pip3.exe
│ python.exe
│ pythonw.exe
│
└─src
│ main.py
│
├─client
│ hoge.py
│
└─service
└─notification
email.py

ソースコードは適当です。
■D:\work-soft\python\exception_propagation\src\client\hoge.py
class Hoge:
def get_hoge_info(self):
print("get_hoge_info")
raise ValueError("error")
def update_hoge_info(self):
print("update_hoge_info")
self.get_hoge_info()
■D:\work-soft\python\exception_propagation\src\service\notification\email.py
class Email:
def create_message(self):
print("メッセージ作成")
return "正常に処理されました。"
def create_error_message(self):
print("エラーメッセージ作成")
return "異常が発生しました。"
def send_email(self, message: str):
print(message)
print("Email送信")
■D:\work-soft\python\exception_propagation\src\main.py
import traceback
from client.hoge import Hoge
from service.notification.email import Email
is_error: bool = False
try:
hoge_client: Hoge = Hoge()
hoge_client.update_hoge_info()
except Exception as e:
is_error = True
print("伝播されてきた例外捕捉")
print(e)
traceback.print_exc()
try:
message: str = ""
email_service: Email = Email()
if is_error:
print(f"エラーあり {is_error}")
message = email_service.create_error_message()
else:
print(f"エラーなし {is_error}")
message = email_service.create_message()
email_service.send_email(message)
print("正常に処理しました。")
except Exception as e:
print("Email送信でエラー")
⇧ で、保存。
cd /d D:\work-soft\python\exception_propagation .venv\Scripts\activate.bat
■「src」ディレクトリに移動して、「main.py」を実行
cd src python main.py

■main.pyの実行結果
(.venv) D:\work-soft\python\exception_propagation>cd src
(.venv) D:\work-soft\python\exception_propagation\src>python main.py
update_hoge_info
get_hoge_info
伝播されてきた例外捕捉
error
Traceback (most recent call last):
File "D:\work-soft\python\exception_propagation\src\main.py", line 8, in
<module>
hoge_client.update_hoge_info()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "D:\work-soft\python\exception_propagation\src\client\hoge.py", line 10, in update_hoge_info
self.get_hoge_info()
~~~~~~~~~~~~~~~~~~^^
File "D:\work-soft\python\exception_propagation\src\client\hoge.py", line 6, in get_hoge_info
raise ValueError("error")
ValueError: error
エラーあり True
エラーメッセージ作成
異常が発生しました。
Email送信
正常に処理しました。
(.venv) D:\work-soft\python\exception_propagation\src>
⇧ 呼び出し元である「main.py」に「例外」が伝播されているようです。
毎度モヤモヤ感が半端ない…
今回はこのへんで。


