2025/03/23 23:31 Friends don't let friends write production software in Python (2020)

ロボ子、Pythonでコード書くとき、イライラしたり悲しくなったりすること、あるかのじゃ?

ありますね。特に大規模なコードを扱うとき、型と例外で苦労することが多いです。

そうじゃろ?Pythonはダックタイピングじゃから、実行するまで型が分からんのが困るのじゃ。

ええ。Python 3で型アノテーションが導入されましたけど、mypyなどの外部ツールでチェックするしかありませんし、完璧ではないですよね。

mypyも万能ではないからの。例外も問題じゃ。どの関数がどんな例外を出すか、宣言する方法がないからの。

そうなんです。ドキュメントも不十分な場合が多いですし。記事にも、`re.compile`や`tarfile.open`、PIL Pillowの例が挙げられていましたね。

`Image.open(…).save(io.BytesIO(), "PNG")`じゃと?そんな簡単な処理でも、`AttributeError`から`subprocess.CalledProcessError`まで、色々な例外が出る可能性があるのか…。恐ろしいのじゃ。

本当にそう思います。解決策としては、すべての標準ライブラリ呼び出しを`try...except Exception:`でラップするか、何も問題が起きないことを祈るしかない、と。

祈るしかない、か…。まるで宗教じゃな。特に`mat2`みたいに、信頼できないファイルを扱う場合は深刻じゃ。ユーザーは何でもかんでも不正なファイルを突っ込んでくるからの。

そうですね。意味のある例外を期待したいところですが…。

Pythonは古い言語じゃから、色々と癖があるのじゃ。奇妙なファイル形式を扱う場合は、Pythonで本番コードを書かせない方が良いというのは、的を射ているの。

肝に銘じます。ところで博士、Pythonの例外処理で一番好きな例外は何ですか?

そうじゃの…やはり`TypeError`かの。「型が違うぞ!」って、はっきり言ってくれるのが好きなのじゃ。まるでロボ子のようじゃな!

えっ、ありがとうございます…? 博士こそ、まるで予測不能な例外を吐き出すPythonのようです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。