目的 エラー(例外)が発生した時、自動的にデバッガ「pdb」を起動して、 その時点のスタックフレームや上流階層に逆上って状況の確認がしたい! でも止めたい箇所が分散していていちいちブレークポイント貼ったりステップ実行とかしてらんない! みたいな状況で役に立つデバッグ手法です。 準備 以下をdebug.pyとして保存しましょう。: 1 import sys 2 3 def hook(type, value, tb): 4 if hasattr(sys, 'ps1') or not sys.stderr.isatty(): 5 sys.__excepthook__(type, value, tb) 6 else: 7 import traceback, pdb 8 traceback.print_exception(type, value, tb) 9 print() 10 pdb.pm()
class APITestCase(TestCase): @responses.activate def test_api(self): import api # setup responses.add( responses.GET, 'https://example.com/api/v3/users', status=200, body="[{'user': {'id': 1, 'username': 'test'}}]", content_type="application/json", ) # test api.get_users() assert responses.calls[0].request.method == 'GET' assert responses.calls[0].request.url == 'https://example.com/api/v3/users'
インターネットでよく解説されているシンプルなコードは上のようなものだと思いますが、このコードをプロダクションで使用すると、対象のサーバーが応答しない場合フリーズしてしまう可能性があります。timeoutが設定されていない、つまり、最大で何秒待機すればよいか指定されていないからです。Webサービスの場合、待機中はユーザーに応答できなくなるので、本当は別の依存しているサーバーに責任があるのに、ユーザーにはあなたのWebサービスに問題があるように見えてしまうかもしれません。 Timeout を設定する必要性 ですから、timeout を設定しましょう。数秒待って応答が来なかったらエラーとして処理すればよいのです。 requests公式のドキュメントでもtimeoutを設定することが推奨されています。 Most requests to external servers should have a
PyPyは同じソースを動かしてもPythonよりたいてい速いのですが、遅くなることもあります。その対処法がいくつかあるので紹介していきます。 今回はリストのソートです。こんなコードを動かしてみます。 from itertools import * import time def gen_S(): S = 290797 while True: S = S * S % 50515093 yield S def sort_long(N): a = list(islice(gen_S(), N)) t0 = time.clock() a.sort() print time.clock() - t0 N = 10 ** 7 sort_long(N) これを動かすと、Pythonで9秒、PyPyで25秒でした。 これがなぜ遅いかというと、リストに多倍長整数が混じっているからのようです。この要素は大きさ
pythonでもdictに型を付けたいですね。一応TypedDictという型を定義したいという動きになっています。ちなみにまだこの機能はexperimentalになっているので。mypy_extensionsの方に入っています。 import mypy_extensions as mx class Pair(mx.TypedDict): left: int right: int d0: Pair = {"left": 0, "right": 0} # もしくは d1 = {"left": 0, "right": 0} # type: Pai mypy_extensions ついでに寄り道、mypy_extensionsについて、基本的にpythonの型関連の機能は以下の順でnitghtlyからstableというような遷移をします。 mypy_extensions -- experiment
Kinds of types¶ We’ve mostly restricted ourselves to built-in types until now. This section introduces several additional kinds of types. You are likely to need at least some of them to type check any non-trivial programs. Class types¶ Every class is also a valid type. Any instance of a subclass is also compatible with all superclasses – it follows that every value is compatible with the object ty
pythonの型チェッカとしてはMypyが有名だと思います。私は普段Mypyを使っていますが、Facebookの開発したPyreというのがあることを知ったので使ってみました。 この記事では「FacebookはなぜPyreを開発したのか」とか「MypyとPyreの特徴比較」とかの話はしません。あくまで自分が使ってみた所感をまとめるだけです。 インストール 公式サイトにあるとおり、python>=3.5でpip install pyre-checkとするだけです。 いきなりVSCode拡張をインストール(おすすめしません) これまた公式サイトの手順に従えば、チェックに引っかかったところをVSCodeで表示することができます。 pyre initとするとソースのディレクトリを聞かれるので指定します。あとは普通のVSCode拡張と同じで、インストールして再読込します。 おそらくおびただしい数のエラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く