{ "cells": [ { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "division by zero\n", "\n", "('division by zero',)\n", "{'__init__': , '__new__': , '__doc__': 'Second argument to a division or modulo operation was zero.'}\n", "{}\n", "(, ZeroDivisionError('division by zero',), )\n", " division by zero\n" ] } ], "source": [ "import sys, traceback\n", "\n", "try:\n", " 1/0\n", "except Exception as e:\n", " print(e)\n", " print(type(e))\n", " print(e.args) \n", " print(vars(sys.exc_info()[0]))\n", " print(vars(sys.exc_info()[1]))\n", " print(sys.exc_info())\n", " print(type(sys.exc_info()[1]), sys.exc_info()[1]) " ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(None, None, None)" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sys\n", "sys.exc_info()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--> except: (, NameError(\"name 'a' is not defined\",))\n", "--> always!\n" ] }, { "ename": "NameError", "evalue": "name 'a' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mZeroDivisionError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'--> ZeroDivisionError!'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'a' is not defined" ] } ], "source": [ "import sys\n", "try:\n", " a\n", "except ZeroDivisionError:\n", " print('--> ZeroDivisionError!')\n", "except as e:\n", " print(\"--> except: \", )\n", " raise\n", "else:\n", " print('--> no except!')\n", "finally:\n", " print('--> always!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "https://docs.python.org/3/library/traceback.html\n", "\n", "traceback.print_tb(tb, limit=None, file=None)\n", "traceback.print_exception(etype, value, tb, limit=None, file=None, chain=True)\n", "traceback.print_exc(limit=None, file=None, chain=True)\n" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** print_tb: (too simple)\n", " File \"\", line 10, in \n", " main()\n", " File \"\", line 4, in main\n", " my_exc()\n", "\n", "*** print_exception: (hard to call)\n", "Traceback (most recent call last):\n", " File \"\", line 10, in \n", " main()\n", " File \"\", line 4, in main\n", " my_exc()\n", "ZeroDivisionError: division by zero\n", "\n", "*** print_exc: (best?)\n", "Traceback (most recent call last):\n", " File \"\", line 10, in \n", " main()\n", " File \"\", line 4, in main\n", " my_exc()\n", " File \"\", line 7, in my_exc\n", " return 1/0\n", "ZeroDivisionError: division by zero\n", "\n", "*** format_exc: (return str)\n", "Traceback (most recent call last):\n", " File \"\", line 10, in \n", " main()\n", " File \"\", line 4, in main\n", " my_exc()\n", " File \"\", line 7, in my_exc\n", " return 1/0\n", "ZeroDivisionError: division by zero\n", "\n", "\n", "*** format_exception:\n", "['Traceback (most recent call last):\\n', ' File \"\", line 10, in \\n main()\\n', ' File \"\", line 4, in main\\n my_exc()\\n', ' File \"\", line 7, in my_exc\\n return 1/0\\n', 'ZeroDivisionError: division by zero\\n']\n", "\n", "*** extract_tb:\n", "[, line 10 in >, , line 4 in main>, , line 7 in my_exc>]\n", "\n", "*** format_tb:\n", "[' File \"\", line 10, in \\n main()\\n', ' File \"\", line 4, in main\\n my_exc()\\n', ' File \"\", line 7, in my_exc\\n return 1/0\\n']\n", "\n", "*** tb_lineno: 10\n" ] } ], "source": [ "import sys, traceback\n", "\n", "def main():\n", " my_exc()\n", "\n", "def my_exc():\n", " return 1/0\n", "\n", "try:\n", " main()\n", "except Exception:\n", " exc_type, exc_value, exc_traceback = sys.exc_info()\n", " print(\"*** print_tb: (too simple)\")\n", " traceback.print_tb(exc_traceback, limit=2, file=sys.stdout)\n", " print()\n", " \n", " print(\"*** print_exception: (hard to call)\")\n", " # exc_type below is ignored on 3.5 and later\n", " traceback.print_exception(exc_type, exc_value, exc_traceback,\n", " limit=2, file=sys.stdout)\n", " print()\n", " \n", " print(\"*** print_exc: (best?)\")\n", " traceback.print_exc(file=sys.stdout)\n", " print()\n", " \n", " print(\"*** format_exc: (return str)\")\n", " formatted_lines = traceback.format_exc()\n", " print(traceback.format_exc())\n", " print()\n", " \n", " print(\"*** format_exception:\")\n", " # exc_type below is ignored on 3.5 and later\n", " print(repr(traceback.format_exception(exc_type, exc_value,\n", " exc_traceback)))\n", " print()\n", " \n", " print(\"*** extract_tb:\")\n", " print(repr(traceback.extract_tb(exc_traceback)))\n", " print()\n", " \n", " print(\"*** format_tb:\")\n", " print(repr(traceback.format_tb(exc_traceback)))\n", " print()\n", " \n", " print(\"*** tb_lineno:\", exc_traceback.tb_lineno)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }