Pythonでカスタム例外と非同期処理をマスターする方法

この記事では、Pythonにおけるカスタム例外と非同期処理について深く探ります。具体的なコード例とその解説、応用例を含めて解説していきます。

目次

カスタム例外の作成と利用

Pythonには、多くの組み込み例外が用意されていますが、独自のビジネスロジックに合わせてカスタム例外を作成することもあります。

基本的なカスタム例外の作成方法

基本的なカスタム例外を作成するには、`Exception` クラスを継承します。

class MyCustomException(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

カスタム例外の使用例

以下のコードは、独自の条件に合致した際にカスタム例外を発生させる例です。

try:
    raise MyCustomException("エラーが発生しました")
except MyCustomException as e:
    print(e)

非同期処理の基礎

非同期処理は、I/O処理などの待ち時間を有効に使うための手法です。

asyncとawait

Pythonで非同期処理を行うためには、`async`と`await`キーワードが用いられます。

基本的な非同期処理の例

import asyncio

async def hello_world():
    print("Hello World")
    await asyncio.sleep(1)
    print("Bye World")

# 非同期関数を実行
asyncio.run(hello_world())

応用例1: 非同期処理中にカスタム例外を使う

非同期処理中に特定の条件でカスタム例外を発生させる場面も考えられます。

import asyncio

class AsyncCustomException(Exception):
    pass

async def risky_task():
    await asyncio.sleep(1)
    raise AsyncCustomException("非同期処理中にエラー")

async def main():
    try:
        await risky_task()
    except AsyncCustomException as e:
        print(f"Caught: {e}")

asyncio.run(main())

応用例2: カスタム例外で非同期処理の制御

非同期処理中に特定のカスタム例外を捕捉して、処理を制御する例です。

import asyncio

class TaskCancelledException(Exception):
    pass

async def cancellable_task():
    try:
        await asyncio.sleep(10)
    except TaskCancelledException:
        print("Task was cancelled, cleaning up...")

async def main():
    task = asyncio.create_task(cancellable_task())
    await asyncio.sleep(1)
    task.cancel()
    try:
        await task
    except asyncio.CancelledError:
        raise TaskCancelledException

asyncio.run(main())

まとめ

この記事では、Pythonにおいてカスタム例外の作成方法と基本的な非同期処理について解説しました。さらに、非同期処理とカスタム例外を組み合わせた応用例もいくつか紹介しました。これを機に、より堅牢で効率的なコードを書いてみてはいかがでしょうか。

コメント

コメントする

目次