【python】癒される・嫌がるpython

# TL;DR

ソースコードは[こちら](https://github.com/YomamaBanana/Random_Scripts/tree/main/Custom_Error)！

# はじめに

こんにちは！YomamaBananaです。
今回は皆さんに面白いものを紹介したいと思います。

開発経験のある方よくご存知かと思いますが、PoCや開発をする際にいつも謎のエラーだったら、
動いていたソースコードがライブラリーの更新によって諦めていたりして、イラッとします。

ここで！そういったエラーを面白く表示したらどうでしょうか。

いわゆる**Custom Error**ということです。

詳しくは[この記事](https://www.delftstack.com/ja/howto/python/python-custom-exception/)を参照。

# 手順

### 1- アスキーアートを作成し、テキストファイルとして保存します。

アスキーアートの生成

```otsukare.txt
──────────────────────────────────────────────▓▓█───────────────────────────
────────────────────────────────────────────▒██▒▒█──────────────────────────
───────────────────────────────────────────█▓▓▓░▒▓▓─────────────────────────
─────────────────────────────────────────▒█▓▒█░▒▒▒█─────────────────────────
────────────────────────────────────────▒█▒▒▒█▒▒▒▒▓▒────────────────────────
─────────────────▓▓▒░──────────────────▓█▒▒▒▓██▓▒░▒█────────────────────────
─────────────────█▓▓██▓░──────────────▓█▒▒▒▒████▒▒▒█────────────────────────
─────────────────▓█▓▒▒▓██▓░──────────▒█▒▒▒▒▒██▓█▓░░▓▒───────────────────────
─────────────────▓▒▓▒▒▒▒▒▓█▓░──░▒▒▓▓██▒▒▒▒▒▒█████▒▒▒▓───────────────────────
─────────────────▓░█▒▒▒▒▒▒▒▓▓█▓█▓▓▓▓▒▒▒▒▒▒▒▒██▓██▒░▒█───────────────────────
─────────────────▓░▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓████▒▒▒█───────────────────────
─────────────────▓░▓██▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▓██░░░█───────────────────────
─────────────────▓░▓███▒▒▒▒▒▒▒▒▒▒▒▓█▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▒▓▓──────────────────────
─────────────────▒▒▒██▓▒▓█▓▒▒▒▒▒▒▒▓▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▓▒█──────────────────────
──────────────────▓▒█▓▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▓█▓▓▓▓█▓▒▒▒▒▒▒▒▓▒─────────────────────
──────────────────▓▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓──────▓█▓▒▒▒▒▒▓█─────────────────────
──────────────────▒▒▓▒▒▒▓▓▓▒▒▒▒▒▒▒▒▒▓▓───░▓▓───█▓▒▒▒▒▒█─────────────────────
───────────────────█▒▒▓▓▓▒▒▓▓▒▒▒▒▒▒▓▓───█████▓──█▓▒▒▒▒▓▒────────────────────
───────────────────▓▓█▒─────▒▓▒▒▒▒▒█───░██████──░█▒▒▒▒▓▓────────────────────
───────────────────▓█▒──▒███─▒▓▒▒▒▒█────██████───▓▒▒▒▒▒▓────────────────────
───────────────────██───█████─█▒▒▒▒█─────███▓────▓▓▒▒▒▒▓────────────────────
───────────────────█▓───█████─▒▓▒▒▒█─────────────█▓▓▓▒▒▓────────────────────
───────────────────█▓───░███──░▓▒▒▒▓█──────────░█▓▒▒▒▓▒▓────────────────────
───────────────────██─────────▒▓▒▒▒▒▓▓──────░▒▓█▓────░▓▓────────────────────
───────────────────▓█░────────█▓██▓▒▒▓█▓▓▓▓██▓▓▒▓▒░░▒▓▒▓────────────────────
───────────────────▒██░──────▓▒███▓▒▒▒▒▓▓▓▓▒▒▒▒▒▒▓▓▓▓▒▓─────────────────────
────────────────────█▓█▓▓▒▒▓█▓▒░██▒▒▓▓█▓▒▒▒▒▒▒▒▒▒▒▒▒▓▓█▒────────────────────
────────────────────▓─░▓▓▓▓▓▒▓▓▓▓▒▓▓▓▒▓▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓────────────────────
────────────────────▒▒▒▓▒▒▒▒▒▒▓█░─░░░─▓▓▒▒▒▒▒▒▒▒▒▒▒▓██▓▒────────────────────
─────────────────────█▓▒▒▒▒▒▒▒▒▓▓─░░░─▓▓▒▒▒▒▒▒▒▒▒▓▓▓▒▒▓▒────────────────────
──────────────────────██▓▓▒▒▒▒▒▒█▒░░░░█▒▒▒▒▒▒▒▒▓█▓▓▒▒▒▒▒────────────────────
─────────────────────░─▒██▓▓▒▒▒▒▒█▓▒▒▓▒▒▒▒▒▒▓███▓▒▒▒▒▒▓▓────────────────────
──────────────────────────░▒▓▓▓▓▒▒▓▓▓▓▓▓████▓▓█▒▒▒▒▒▓▓█░────────────────────
............................................................................
..#######..########..######..##.....##.##....##....###....########..########
.##.....##....##....##....##.##.....##.##...##....##.##...##.....##.##......
.##.....##....##....##.......##.....##.##..##....##...##..##.....##.##......
.##.....##....##.....######..##.....##.#####....##.....##.########..######..
.##.....##....##..........##.##.....##.##..##...#########.##...##...##......
.##.....##....##....##....##.##.....##.##...##..##.....##.##....##..##......
..#######.....##.....######...#######..##....##.##.....##.##.....##.########
```

癒しだ～～

 https://fsymbols.com/text-art/

### 2- テキストファイルを読み込み、普通にプリントする。

必要に応じてCUSTOMERRORに取り組む。

```run.py
#################################
###     ERROR
#################################

class EXPLOSION(Exception):
    def __init__(self):
        with open("messages/explosion.txt", "r", encoding="utf-8") as f:
            explosion = f.read()
        self.message = f"\n\n{explosion}"
        super().__init__(self.message)


class ObamaError(Exception):
    def __init__(self) -> None:
        with open("messages/obama.txt", "r", encoding="utf-8") as f:
            obama = f.read()
        self.message = f"\n\n{obama}"
        super().__init__(self.message)

if True:
    raise EXPLOSION

#################################
###     OTSUKARE
#################################

def otsukare():
    with open("messages/otsukare.txt", "r", encoding="utf-8") as f:
        otsukare = f.read()
    print(otsukare)

otsukare()

#################################
###     ANIMATED
#################################

import os 
from time import sleep

def clearConsole():
    command = 'clear'
    if os.name in ('nt', 'dos'):  # If Machine is running on Windows, use cls
        command = 'cls'
    os.system(command)

def kawaii_goodbye():
    for txt in os.listdir("messages/kawaii"):
        f = open(f"messages/kawaii/{txt}", "r", encoding="utf-8").read()
        sleep(0.2)
        clearConsole()
        print(f)
        

kawaii_goodbye()
```

# 出力

オバマエラー

```shell
D:\Python\git\Random_Scripts\Custom_Error>python run.py
Traceback (most recent call last):
  File "run.py", line 22, in <module>
    raise ObamaError
__main__.ObamaError:

░░█▀░░░░░░░░░░░▀▀███████░░░░
░░█▌░░░░░░░░░░░░░░░▀██████░░░
░█▌░░░░░░░░░░░░░░░░███████▌░░
░█░░░░░░░░░░░░░░░░░████████░░
▐▌░░░░░░░░░░░░░░░░░▀██████▌░░
░▌▄███▌░░░░▀████▄░░░░▀████▌░░
▐▀▀▄█▄░▌░░░▄██▄▄▄▀░░░░████▄▄░
▐░▀░░═▐░░░░░░══░░▀░░░░▐▀░▄▀▌▌
▐░░░░░▌░░░░░░░░░░░░░░░▀░▀░░▌▌
▐░░░▄▀░░░▀░▌░░░░░░░░░░░░▌█░▌▌
░▌░░▀▀▄▄▀▀▄▌▌░░░░░░░░░░▐░▀▐▐░
░▌░░▌░▄▄▄▄░░░▌░░░░░░░░▐░░▀▐░░
░█░▐▄██████▄░▐░░░░░░░░█▀▄▄▀░░
░▐░▌▌░░░░░░▀▀▄▐░░░░░░█▌░░░░░░
░░█░░▄▀▀▀▀▄░▄═╝▄░░░▄▀░▌░░░░░░
░░░▌▐░░░░░░▌░▀▀░░▄▀░░▐░░░░░░░
░░░▀▄░░░░░░░░░▄▀▀░░░░█░░░░░░░
░░░▄█▄▄▄▄▄▄▄▀▀░░░░░░░▌▌░░░░░░
░░▄▀▌▀▌░░░░░░░░░░░░░▄▀▀▄░░░░░
▄▀░░▌░▀▄░░░░░░░░░░▄▀░░▌░▀▄░░░
░░░░▌█▄▄▀▄░░░░░░▄▀░░░░▌░░░▌▄▄
░░░▄▐██████▄▄░▄▀░░▄▄▄▄▌░░░░▄░
░░▄▌████████▄▄▄███████▌░░░░░▄
░▄▀░██████████████████▌▀▄░░░░
▀░░░█████▀▀░░░▀███████░░░▀▄░░
░░░░▐█▀░░░▐░░░░░▀████▌░░░░▀▄░
░░░░░░▌░░░▐░░░░▐░░▀▀█░░░░░░░▀
░░░░░░▐░░░░▌░░░▐░░░░░▌░░░░░░░
░╔╗║░╔═╗░═╦═░░░░░╔╗░░╔═╗░╦═╗░
░║║║░║░║░░║░░░░░░╠╩╗░╠═╣░║░║░
░║╚╝░╚═╝░░║░░░░░░╚═╝░║░║░╩═╝░

D:\Python\git\Random_Scripts\Custom_Error>
```

爆発

```shell
D:\Python\git\Random_Scripts\Custom_Error>python run.py
Traceback (most recent call last):
  File "run.py", line 22, in <module>
    raise EXPLOSION
__main__.EXPLOSION:

        ███████╗██╗░░██╗██████╗░██╗░░░░░░█████╗░██████╗░███████╗██████╗░██╗
        ██╔════╝╚██╗██╔╝██╔══██╗██║░░░░░██╔══██╗██╔══██╗██╔════╝██╔══██╗██║
        █████╗░░░╚███╔╝░██████╔╝██║░░░░░██║░░██║██║░░██║█████╗░░██║░░██║██║
        ██╔══╝░░░██╔██╗░██╔═══╝░██║░░░░░██║░░██║██║░░██║██╔══╝░░██║░░██║╚═╝
        ███████╗██╔╝╚██╗██║░░░░░███████╗╚█████╔╝██████╔╝███████╗██████╔╝██╗
        ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚══════╝░╚════╝░╚═════╝░╚══════╝╚═════╝░╚═╝

                               ________________
                          ____/ (  (    )   )  \___
                         /( (  (  )   _    ))  )   )\\
                       ((     (   )(    )  )   (   )  )
                     ((/  ( _(   )   (   _) ) (  () )  )
                    ( (  ( (_)   ((    (   )  .((_ ) .  )_
                   ( (  )    (      (  )    )   ) . ) (   )
                  (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )
                  ( (  (   ) (  )   (  ))     ) _)(   )  )  )
                 ( (  ( \ ) (    (_  ( ) ( )  )   ) )  )) ( )
                  (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )
                 ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )
                  ((  (   )(    (     _    )   _) _(_ (  (_ )
                   (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)
                   ((__)        \\||lll|l||///          \_))
                            (   /(/ (  )  ) )\   )
                          (    ( ( ( | | ) ) )\   )
                           (   /(| / ( )) ) ) )) )
                         (     ( ((((_(|)_)))))     )
                          (      ||\(|(|)|/||     )
                        (        |(||(||)||||        )
                          (     //|/l|||)|\\ \     )
                        (/ / //  /|//||||\\  \ \  \ _)
-------------------------------------------------------------------------------

D:\Python\git\Random_Scripts\Custom_Error>
```

癒し

```shell
D:\Python\git\Random_Scripts\Custom_Error>python run.py


──────────────────────────────────────────────▓▓█───────────────────────────
────────────────────────────────────────────▒██▒▒█──────────────────────────
───────────────────────────────────────────█▓▓▓░▒▓▓─────────────────────────
─────────────────────────────────────────▒█▓▒█░▒▒▒█─────────────────────────
────────────────────────────────────────▒█▒▒▒█▒▒▒▒▓▒────────────────────────
─────────────────▓▓▒░──────────────────▓█▒▒▒▓██▓▒░▒█────────────────────────
─────────────────█▓▓██▓░──────────────▓█▒▒▒▒████▒▒▒█────────────────────────
─────────────────▓█▓▒▒▓██▓░──────────▒█▒▒▒▒▒██▓█▓░░▓▒───────────────────────
─────────────────▓▒▓▒▒▒▒▒▓█▓░──░▒▒▓▓██▒▒▒▒▒▒█████▒▒▒▓───────────────────────
─────────────────▓░█▒▒▒▒▒▒▒▓▓█▓█▓▓▓▓▒▒▒▒▒▒▒▒██▓██▒░▒█───────────────────────
─────────────────▓░▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓████▒▒▒█───────────────────────
─────────────────▓░▓██▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▓██░░░█───────────────────────
─────────────────▓░▓███▒▒▒▒▒▒▒▒▒▒▒▓█▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▒▓▓──────────────────────
─────────────────▒▒▒██▓▒▓█▓▒▒▒▒▒▒▒▓▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▓▒█──────────────────────
──────────────────▓▒█▓▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▓█▓▓▓▓█▓▒▒▒▒▒▒▒▓▒─────────────────────
──────────────────▓▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓──────▓█▓▒▒▒▒▒▓█─────────────────────
──────────────────▒▒▓▒▒▒▓▓▓▒▒▒▒▒▒▒▒▒▓▓───░▓▓───█▓▒▒▒▒▒█─────────────────────
───────────────────█▒▒▓▓▓▒▒▓▓▒▒▒▒▒▒▓▓───█████▓──█▓▒▒▒▒▓▒────────────────────
───────────────────▓▓█▒─────▒▓▒▒▒▒▒█───░██████──░█▒▒▒▒▓▓────────────────────
───────────────────▓█▒──▒███─▒▓▒▒▒▒█────██████───▓▒▒▒▒▒▓────────────────────
───────────────────██───█████─█▒▒▒▒█─────███▓────▓▓▒▒▒▒▓────────────────────
───────────────────█▓───█████─▒▓▒▒▒█─────────────█▓▓▓▒▒▓────────────────────
───────────────────█▓───░███──░▓▒▒▒▓█──────────░█▓▒▒▒▓▒▓────────────────────
───────────────────██─────────▒▓▒▒▒▒▓▓──────░▒▓█▓────░▓▓────────────────────
───────────────────▓█░────────█▓██▓▒▒▓█▓▓▓▓██▓▓▒▓▒░░▒▓▒▓────────────────────
───────────────────▒██░──────▓▒███▓▒▒▒▒▓▓▓▓▒▒▒▒▒▒▓▓▓▓▒▓─────────────────────
────────────────────█▓█▓▓▒▒▓█▓▒░██▒▒▓▓█▓▒▒▒▒▒▒▒▒▒▒▒▒▓▓█▒────────────────────
────────────────────▓─░▓▓▓▓▓▒▓▓▓▓▒▓▓▓▒▓▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓────────────────────
────────────────────▒▒▒▓▒▒▒▒▒▒▓█░─░░░─▓▓▒▒▒▒▒▒▒▒▒▒▒▓██▓▒────────────────────
─────────────────────█▓▒▒▒▒▒▒▒▒▓▓─░░░─▓▓▒▒▒▒▒▒▒▒▒▓▓▓▒▒▓▒────────────────────
──────────────────────██▓▓▒▒▒▒▒▒█▒░░░░█▒▒▒▒▒▒▒▒▓█▓▓▒▒▒▒▒────────────────────
─────────────────────░─▒██▓▓▒▒▒▒▒█▓▒▒▓▒▒▒▒▒▒▓███▓▒▒▒▒▒▓▓────────────────────
──────────────────────────░▒▓▓▓▓▒▒▓▓▓▓▓▓████▓▓█▒▒▒▒▒▓▓█░────────────────────
............................................................................
..#######..########..######..##.....##.##....##....###....########..########
.##.....##....##....##....##.##.....##.##...##....##.##...##.....##.##......
.##.....##....##....##.......##.....##.##..##....##...##..##.....##.##......
.##.....##....##.....######..##.....##.#####....##.....##.########..######..
.##.....##....##..........##.##.....##.##..##...#########.##...##...##......
.##.....##....##....##....##.##.....##.##...##..##.....##.##....##..##......
..#######.....##.....######...#######..##....##.##.....##.##.....##.########

D:\Python\git\Random_Scripts\Custom_Error>
```

# あとがき

今回は非常にシンプルなものを書いてみたが、すごくドキドキワクワクしました。
やっぱり開発者としてクリエイティブであるべく、小さいなことからでもいいと
思います。

ぜひこれを発展させ、「大阪おじいちゃんエラー」とか「メイドエラー」など、
面白そうなものを書いて、開発をもっと楽しみましょう！

最後に

![goodbye.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290515/a535ba3e-d042-bc23-e0b9-c654ea518aee.gif)