{ "info": { "author": "Albert Zeyer", "author_email": "albzey@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "==============\nbetter_exchook\n==============\n\nA nicer drop-in-replacement for Python ``sys.excepthook``,\ni.e. it prints stack traces with extended information.\nIt will add some useful information for each frame,\nlike printing the relevant variables (relevant = referenced in the code line).\nAlso see `Python source and comments `_ for further details.\n\nFeatures\n--------\n* Multi-line Python statements in the stack trace output.\n* Colored/formated output of each frame.\n* Syntax highlighting for the Python source code.\n* Support for `DomTerm `__,\n where it folds all the details of each stack frame away by default,\n and thus provides a much more comprehensive overview,\n while still providing all the details when needed.\n\n\nInstallation\n------------\n\nYou can just copy over the single file ``better_exchook.py`` to your project.\n\nOr alternatively, it is also available `on PyPI `_\nand can be installed via:\n\n.. code::\n\n pip install better_exchook\n\n\nUsage\n-----\n\n.. code:: python\n\n import better_exchook\n better_exchook.install() # will just do: sys.excepthook = better_exchook\n\n\nExamples\n--------\n\nPython example code:\n\n.. code:: python\n\n try:\n x = {1:2, \"a\":\"b\"}\n def f():\n y = \"foo\"\n x, 42, sys.stdin.__class__, sys.exc_info, y, z\n f()\n except Exception:\n better_exchook.better_exchook(*sys.exc_info())\n\nOutput:\n\n.. code::\n\n EXCEPTION\n Traceback (most recent call last):\n File \"better_exchook.py\", line 478, in \n line: f()\n locals:\n f = \n File \"better_exchook.py\", line 477, in f\n line: x, 42, sys.stdin.__class__, sys.exc_info, y, z\n locals:\n x = {'a': 'b', 1: 2}\n sys = \n sys.stdin = ', mode 'r' at 0x107d9f0c0>\n sys.stdin.__class__ = \n sys.exc_info = \n y = 'foo'\n z = \n NameError: global name 'z' is not defined\n\nPython example code:\n\n.. code:: python\n\n try:\n f = lambda x: None\n f(x, y)\n except Exception:\n better_exchook.better_exchook(*sys.exc_info())\n\nOutput:\n\n.. code::\n\n EXCEPTION\n Traceback (most recent call last):\n File \"better_exchook.py\", line 484, in \n line: f(x, y)\n locals:\n f = at 0x107f1df50>\n x = {'a': 'b', 1: 2}\n y = \n NameError: name 'y' is not defined\n\nPython example code:\n\n.. code:: python\n\n try:\n (lambda x: None)(__name__,\n 42) # multiline\n except Exception:\n better_exchook.better_exchook(*sys.exc_info())\n\nOutput:\n\n.. code::\n\n EXCEPTION\n Traceback (most recent call last):\n File \"better_exchook.py\", line 490, in \n line: (lambda x: None)(__name__,\n 42) # multiline\n locals:\n x = {'a': 'b', 1: 2}\n __name__ = '__main__', len = 8\n TypeError: () takes exactly 1 argument (2 given)\n \nPython example code:\n\n.. code:: python\n\n # use this to overwrite the global exception handler\n sys.excepthook = better_exchook.better_exchook\n # and fail\n finalfail(sys)\n\nOutput:\n\n.. code::\n\n EXCEPTION\n Traceback (most recent call last):\n File \"better_exchook.py\", line 497, in \n line: finalfail(sys)\n locals:\n finalfail = \n sys = \n NameError: name 'finalfail' is not defined\n\nScreenshot:\n\n.. image:: https://gist.githubusercontent.com/albertz/a4ce78e5ccd037041638777f10b10327/raw/7ec2bb7079dbd56119d498f20905404cb2d812c0/screenshot1.png\n\nScreencast with `DomTerm `__:\n\n.. image:: https://gist.githubusercontent.com/albertz/a4ce78e5ccd037041638777f10b10327/raw/7ec2bb7079dbd56119d498f20905404cb2d812c0/screencast-domterm.gif\n\n\nSimilar projects\n----------------\n\n* ``_\n* `Nose does something similar for assertion failures `_.\n* IPython has something similar (`this `__).\n Do this: ``from IPython.core import ultratb; sys.excepthook = ultratb.VerboseTB()``.\n* Ka-Ping Yee's \"cgitb.py\", which is part of Python,\n `see here `__,\n `code here `__.\n* See `this `__\n related StackOverflow question.\n\n\n-- Albert Zeyer, \n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/albertz/py_better_exchook", "keywords": "", "license": "2-clause BSD license", "maintainer": "", "maintainer_email": "", "name": "better_exchook", "package_url": "https://pypi.org/project/better_exchook/", "platform": "", "project_url": "https://pypi.org/project/better_exchook/", "project_urls": { "Homepage": "https://github.com/albertz/py_better_exchook" }, "release_url": "https://pypi.org/project/better_exchook/1.20190330.152253/", "requires_dist": null, "requires_python": "", "summary": "nice Python exception hook replacement", "version": "1.20190330.152253" }, "last_serial": 5007214, "releases": { "1.20160612.132345": [], "1.20160612.132614": [ { "comment_text": "", "digests": { "md5": "fd96909c567623dfe8fd973fa6a5b3a1", "sha256": "678ceafbc83a5de6c10f5325b1d275591bc63db3970e00cc63be87238a993d62" }, "downloads": -1, "filename": "better_exchook-1.20160612.132614.tar.gz", "has_sig": false, "md5_digest": "fd96909c567623dfe8fd973fa6a5b3a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6695, "upload_time": "2016-06-12T13:26:17", "url": "https://files.pythonhosted.org/packages/f6/f8/18f7a37e6b1e45577960e52129f9e56d9014912cd01fdf01bb43ba5287fb/better_exchook-1.20160612.132614.tar.gz" } ], "1.20160612.133806": [ { "comment_text": "", "digests": { "md5": "255c2e5d22e47439c034de07b81d751b", "sha256": "27d3bca751bbc3a2a5c2d9395f0ac6f232f96e70a2701be4ad25a129af191c65" }, "downloads": -1, "filename": "better_exchook-1.20160612.133806.tar.gz", "has_sig": false, "md5_digest": "255c2e5d22e47439c034de07b81d751b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6700, "upload_time": "2016-06-12T13:38:09", "url": "https://files.pythonhosted.org/packages/79/38/ae4de86bf0f623c434915d84d87dbd35255f19af1e0352a0a847c321cfdd/better_exchook-1.20160612.133806.tar.gz" } ], "1.20160612.134916": [ { "comment_text": "", "digests": { "md5": "ebf510ae8d0af381f776363cfcf8e0d8", "sha256": "120251674d19fd3f4fe1015d87e16e3cc8b067a95f6d22fb3d93d9ca3d54e3dd" }, "downloads": -1, "filename": "better_exchook-1.20160612.134916.tar.gz", "has_sig": false, "md5_digest": "ebf510ae8d0af381f776363cfcf8e0d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7620, "upload_time": "2016-06-12T13:49:19", "url": "https://files.pythonhosted.org/packages/6f/67/ef03c9c7f2658a120a1137b85545ba8344f598d04df1d656a147540938eb/better_exchook-1.20160612.134916.tar.gz" } ], "1.20160612.134947": [ { "comment_text": "", "digests": { "md5": "35dcf7bc6e0d9bc3fb3843736dcb4d13", "sha256": "4c4cbc3404d5c5db8a9577ee414e11158e00c46c5437451921927d697ef7adb1" }, "downloads": -1, "filename": "better_exchook-1.20160612.134947.tar.gz", "has_sig": false, "md5_digest": "35dcf7bc6e0d9bc3fb3843736dcb4d13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7619, "upload_time": "2016-06-12T13:49:50", "url": "https://files.pythonhosted.org/packages/64/56/daf689b970e3ff8e5623d3616401c3f67cfc3efe7d9fb0a702d5ed3439e5/better_exchook-1.20160612.134947.tar.gz" } ], "1.20160612.135412": [ { "comment_text": "", "digests": { "md5": "0426e01591f77db511a1240ba93c835d", "sha256": "9e124e98c9964b00d4d330199e4eaf09df012595ce885f5efd83bdf5018ded23" }, "downloads": -1, "filename": "better_exchook-1.20160612.135412.tar.gz", "has_sig": false, "md5_digest": "0426e01591f77db511a1240ba93c835d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8038, "upload_time": "2016-06-12T13:54:15", "url": "https://files.pythonhosted.org/packages/fc/a7/f2bff5d98876ddcc5437b868dde6b788d7f283598540e88be0935dac2da6/better_exchook-1.20160612.135412.tar.gz" } ], "1.20160612.145523": [ { "comment_text": "", "digests": { "md5": "657be0bc6ad9eb5bbae1e9bd586f58a9", "sha256": "98d70c6304c643a09da9fc87fa7c28a5b834632cc3dd330e8515f7b53861744d" }, "downloads": -1, "filename": "better_exchook-1.20160612.145523.tar.gz", "has_sig": false, "md5_digest": "657be0bc6ad9eb5bbae1e9bd586f58a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8040, "upload_time": "2016-06-12T14:55:27", "url": "https://files.pythonhosted.org/packages/c1/2d/95c01ed04bea20764d440f66949c144960bbd9013a3ca542df847a5913a3/better_exchook-1.20160612.145523.tar.gz" } ], "1.20160612.150038": [ { "comment_text": "", "digests": { "md5": "8c98b86f09f75066416d463c7784ffc6", "sha256": "b549e47851e7f5e1f50f6a434f20b44a23b26032c8fa49940c4c20e0cd1737d6" }, "downloads": -1, "filename": "better_exchook-1.20160612.150038.tar.gz", "has_sig": false, "md5_digest": "8c98b86f09f75066416d463c7784ffc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8092, "upload_time": "2016-06-12T15:00:41", "url": "https://files.pythonhosted.org/packages/a7/0e/c17f9e09b3a65a8cf1db2d26dc45a0fb049066aa00d03a88987e9f1c815e/better_exchook-1.20160612.150038.tar.gz" } ], "1.20170708.144950": [ { "comment_text": "", "digests": { "md5": "bb03e9a7d04baaa3b13d955ddfc002bf", "sha256": "c28a7436f3767cfa5e3ba45e9fcad7d166aac0b21866c4b2253fe58ebf9d519a" }, "downloads": -1, "filename": "better_exchook-1.20170708.144950.tar.gz", "has_sig": false, "md5_digest": "bb03e9a7d04baaa3b13d955ddfc002bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11068, "upload_time": "2017-07-08T14:49:52", "url": "https://files.pythonhosted.org/packages/32/8e/2101f4e9eaefa09544b9a27407066c3750c56645525d4421196565bb79cf/better_exchook-1.20170708.144950.tar.gz" } ], "1.20171121.105512": [ { "comment_text": "", "digests": { "md5": "09ca437dc19178d6d2d23695bd5b9dd3", "sha256": "0bae3bf4c6f07584ead54287e2fc0badf59e69da22cb60dc9c798d2daa172924" }, "downloads": -1, "filename": "better_exchook-1.20171121.105512.tar.gz", "has_sig": false, "md5_digest": "09ca437dc19178d6d2d23695bd5b9dd3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12691, "upload_time": "2017-11-21T10:55:13", "url": "https://files.pythonhosted.org/packages/1f/96/46a40e4c454a21c11eee8e30c90ad97b68555189769aea1f2de252d48134/better_exchook-1.20171121.105512.tar.gz" } ], "1.20181019.221648": [ { "comment_text": "", "digests": { "md5": "e4b50b3d6a2110d85457a5a46689dc74", "sha256": "86122b966b33cf7fa242b51ccffa7ee8b5567b5bc3294330192d4d57b7c2581b" }, "downloads": -1, "filename": "better_exchook-1.20181019.221648.tar.gz", "has_sig": false, "md5_digest": "e4b50b3d6a2110d85457a5a46689dc74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14893, "upload_time": "2018-10-19T22:16:50", "url": "https://files.pythonhosted.org/packages/e0/c4/8630953df4b692a51ce1092b1717412f7f66cc1f30df660c36c50b50e47c/better_exchook-1.20181019.221648.tar.gz" } ], "1.20181230.123719": [ { "comment_text": "", "digests": { "md5": "7583f5d7823181efa03587c23df519a0", "sha256": "f451ceb35c3a5cc5e7b885fac47b3296ff1071d0192d177b0eb1bce3679aca2a" }, "downloads": -1, "filename": "better_exchook-1.20181230.123719.tar.gz", "has_sig": false, "md5_digest": "7583f5d7823181efa03587c23df519a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16443, "upload_time": "2018-12-30T12:37:21", "url": "https://files.pythonhosted.org/packages/c7/08/5eafdd26913e724ede5068294c8790588e549ec5165bd06b24d270360745/better_exchook-1.20181230.123719.tar.gz" } ], "1.20190103.160739": [ { "comment_text": "", "digests": { "md5": "88123de87028ee41c95c19f0e77313c7", "sha256": "311df64c1e780b57127b192a300a8da0e7526c1ddb53711abe3c0f192ce48421" }, "downloads": -1, "filename": "better_exchook-1.20190103.160739.tar.gz", "has_sig": false, "md5_digest": "88123de87028ee41c95c19f0e77313c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16647, "upload_time": "2019-01-03T16:07:40", "url": "https://files.pythonhosted.org/packages/78/8e/15898068192c5385cde7f2799a190eeb12b637f6eaa92ee5688c9965a8f7/better_exchook-1.20190103.160739.tar.gz" } ], "1.20190103.160956": [ { "comment_text": "", "digests": { "md5": "5678d4fa55aaa3c9389cb2a50cddaa64", "sha256": "ec7541608f0c30f9983f2d517702902cce00f4fa6f65c89e51bbe6034e29cdd5" }, "downloads": -1, "filename": "better_exchook-1.20190103.160956.tar.gz", "has_sig": false, "md5_digest": "5678d4fa55aaa3c9389cb2a50cddaa64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16645, "upload_time": "2019-01-03T16:09:57", "url": "https://files.pythonhosted.org/packages/5f/4c/86526435ad4c83e9a8ed964769320d96c80a6a2cd91d19a09b7ae4016c52/better_exchook-1.20190103.160956.tar.gz" } ], "1.20190203.162313": [ { "comment_text": "", "digests": { "md5": "070681e278a9e64c0448e11b9c25c50a", "sha256": "517bcfade9792c6e96060a0d85134fd205d0dc0bc736010c87e835b5f638d8aa" }, "downloads": -1, "filename": "better_exchook-1.20190203.162313.tar.gz", "has_sig": false, "md5_digest": "070681e278a9e64c0448e11b9c25c50a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18219, "upload_time": "2019-02-03T15:23:40", "url": "https://files.pythonhosted.org/packages/21/cd/0159df8889ae1227ce356c88cf9eae023979839f338d1009ee5ae39b3977/better_exchook-1.20190203.162313.tar.gz" } ], "1.20190203.162941": [ { "comment_text": "", "digests": { "md5": "dbe48140f45831fc7931e073763ad127", "sha256": "91a6fd4dd958141586e8bb2f7fea76dad8180fd858b7d49c4ad5e939d019f4ec" }, "downloads": -1, "filename": "better_exchook-1.20190203.162941.tar.gz", "has_sig": false, "md5_digest": "dbe48140f45831fc7931e073763ad127", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18234, "upload_time": "2019-02-03T15:29:58", "url": "https://files.pythonhosted.org/packages/cd/59/8ccb03fe86f62f76040aa727b89d1efe8c669b0a57fd8f99a9e2965ab13b/better_exchook-1.20190203.162941.tar.gz" } ], "1.20190212.151715": [ { "comment_text": "", "digests": { "md5": "98feea68bc9ce38cfbce5ad5c2b1a80f", "sha256": "eaa8b9d1ff8e513f18d86debcf3bd24e473367379228cf2aff148e9b65eef000" }, "downloads": -1, "filename": "better_exchook-1.20190212.151715.tar.gz", "has_sig": false, "md5_digest": "98feea68bc9ce38cfbce5ad5c2b1a80f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18924, "upload_time": "2019-02-12T14:17:31", "url": "https://files.pythonhosted.org/packages/ef/0a/4ebb2da60225719181e775b6a03d10c05b20fcb7d6b4301ebdf571b2e540/better_exchook-1.20190212.151715.tar.gz" } ], "1.20190330.152253": [ { "comment_text": "", "digests": { "md5": "beab52eabb83ee8b8c4aae137e6d6d0c", "sha256": "94f8ac9f1f215bd91dcd77c552c1391ad5d46fd4735e894c30bb4fc80ac67ea8" }, "downloads": -1, "filename": "better_exchook-1.20190330.152253.tar.gz", "has_sig": false, "md5_digest": "beab52eabb83ee8b8c4aae137e6d6d0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20038, "upload_time": "2019-03-30T14:23:18", "url": "https://files.pythonhosted.org/packages/df/dd/548d05d0364b96a86d9d0ae5814e34d8528e4b1bb1288ebbbeff80df489f/better_exchook-1.20190330.152253.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "beab52eabb83ee8b8c4aae137e6d6d0c", "sha256": "94f8ac9f1f215bd91dcd77c552c1391ad5d46fd4735e894c30bb4fc80ac67ea8" }, "downloads": -1, "filename": "better_exchook-1.20190330.152253.tar.gz", "has_sig": false, "md5_digest": "beab52eabb83ee8b8c4aae137e6d6d0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20038, "upload_time": "2019-03-30T14:23:18", "url": "https://files.pythonhosted.org/packages/df/dd/548d05d0364b96a86d9d0ae5814e34d8528e4b1bb1288ebbbeff80df489f/better_exchook-1.20190330.152253.tar.gz" } ] }