5
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?

More than 1 year has passed since last update.

TL;DR

ソースコードはこちら

はじめに

こんにちは!YomamaBananaです!
この記事は以前の記事の発展形です。

以前はPython開発する際に出くわすエラーを面白く表示しようぜ、について書きました。しかしその時のやり方はあまりにも単純すぎて、どこかで面白さが欠けていると感じました。

そこで今回は別の方法でエラーを面白く表示するチャレンジになります!

使用するツール

今回はasciimaticsというライブラリーを利用します。

asciimaticsとはterminalにいろんなものを表示したら、機能を追加したりするライブラリーです。

pip install asciimatics

画像データ

今回エラー表示に使う画像は下記の二つになります。

画像1
simle.png

画像2
404.png

デモ

実行結果は下記の通りです。
custom_error.gif

ソースコード

improved_version.py
# 必要なライブラリーをimportする
from __future__ import division
from asciimatics.effects import BannerText, Print, Scroll
from asciimatics.renderers import ColourImageFile, FigletText, ImageFile
from asciimatics.scene import Scene
from asciimatics.screen import Screen
from asciimatics.exceptions import ResizeScreenError
import sys

# 笑顔EMOJIを用いたエラー
def simle_error(screen):
    scenes = []
    effects = [
        BannerText(screen, ImageFile("img/simle.png", screen.height - 2, colours=screen.colours),
              0, 0),
        Print(screen,
              FigletText(
                "www ERROR www",
                font='banner3' if screen.width > 80 else 'banner'
                ),
              screen.height//2-3,
              colour=Screen.COLOUR_RED, bg=7 if screen.unicode_aware else 0)
    ]
    scenes.append(Scene(effects))
    screen.play(scenes, stop_on_resize=True)

# 404エラー画像を用いたエラー
def error_404(screen):
    scenes = []
    effects = [
        Print(screen,
              ColourImageFile(
                screen, 
                "img/404.png", 
                screen.height-2,
                uni=screen.unicode_aware,
                dither=screen.unicode_aware
                ),
            0,
            stop_frame=200)
    ]
    scenes.append(Scene(effects))
    screen.play(scenes, stop_on_resize=True)

# 自前のエラー関数
def CustomError(demo):
    while True:
            try:
                Screen.wrapper(demo)
                sys.exit(0)
            except ResizeScreenError:
                pass    

if __name__ == "__main__":
    try:
        1 + "str"
    except:
        # エラーを発動させる
        CustomError(error_404)

あとがき

今回はハードコーディングなく、スマートにエラー発生と予測するところに面白く表示することができました。
この記事の目的はあくまでエラーを面白く表示するであり、asciimaticsのたくさんの機能については触れませんでした。
asciimaticsには様々な機能が入っており、気になる人はぜひ試してみてください。

公式githubにはたくさんのsampleがありますので、ご参考までに!

前回と今回の記事を通して分かったことは、開発は楽しく面白くやっていこうぜとのことです。

開発者のみなさん、なろうとしているみなさん、楽しくやって行きましょう!

5
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
5
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?