CINXE.COM

tryceratops · PyPI

<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="defaultLanguage" content="en"> <meta name="availableLanguages" content="en, es, fr, ja, pt_BR, uk, el, de, zh_Hans, zh_Hant, ru, he, eo, ko"> <title>tryceratops · PyPI</title> <meta name="description" content="Prevent Exception Handling AntiPatterns"> <link rel="stylesheet" href="/static/css/warehouse-ltr.4afe342a.css"> <link rel="stylesheet" href="/static/css/fontawesome.080e1050.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+3:400,400italic,600,600italic,700,700italic%7CSource+Code+Pro:500"> <noscript> <link rel="stylesheet" href="/static/css/noscript.0673c9ea.css"> </noscript> <link rel="icon" href="/static/images/favicon.35549fe8.ico" type="image/x-icon"> <link rel="alternate" type="application/rss+xml" title="RSS: 40 latest updates" href="/rss/updates.xml"> <link rel="alternate" type="application/rss+xml" title="RSS: 40 newest packages" href="/rss/packages.xml"> <link rel="alternate" type="application/rss+xml" title="RSS: latest releases for tryceratops" href="/rss/project/tryceratops/releases.xml"> <link rel="canonical" href="https://pypi.org/project/tryceratops/"> <meta property="og:url" content="https://pypi.org/project/tryceratops/"> <meta property="og:site_name" content="PyPI"> <meta property="og:type" content="website"> <meta property="og:image" content="https://pypi.org/static/images/twitter.abaf4b19.webp"> <meta property="og:title" content="tryceratops"> <meta property="og:description" content="Prevent Exception Handling AntiPatterns"> <link rel="search" type="application/opensearchdescription+xml" title="PyPI" href="/opensearch.xml"> <script async data-ga-id="UA-55961911-1" data-ga4-id="G-RW7D75DF8V" src="/static/js/warehouse.33c92630.js"> </script> <script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] }, }; </script> <script async src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-svg.js" integrity="sha256-1CldwzdEg2k1wTmf7s5RWVd7NMXI/7nxxjJM2C4DqII=" crossorigin="anonymous" ></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-55961911-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-RW7D75DF8V"></script> <script defer src="https://www.fastly-insights.com/insights.js?k=6a52360a-f306-421e-8ed5-7417d0d4a4e9&dnt=true"></script> <script async src="https://media.ethicalads.io/media/client/v1.4.0/ethicalads.min.js" integrity="sha256-U3hKDidudIaxBDEzwGJApJgPEf2mWk6cfMWghrAa6i0= sha384-UcmsCqcNRSLW/dV3Lo1oCi2/VaurXbib6p4HyUEOeIa/4OpsrnucrugAefzVZJfI sha512-q4t1L4xEjGV2R4hzqCa41P8jrgFUS8xTb8rdNv4FGvw7FpydVj/kkxBJHOiaoxHa8olCcx1Slk9K+3sNbsM4ug==" crossorigin="anonymous" ></script> </head> <body data-controller="viewport-toggle"> <!-- Accessibility: this link should always be the first piece of content inside the body--> <a href="#content" class="skip-to-content">Skip to main content</a> <button type="button" class="button button--primary button--switch-to-mobile hidden" data-viewport-toggle-target="switchToMobile" data-action="viewport-toggle#switchToMobile"> Switch to mobile version </button> <div id="sticky-notifications" class="stick-to-top js-stick-to-top"> <!-- Add browser warning. Will show for ie9 and below --> <!--[if IE]> <div class="notification-bar notification-bar--warning" role="status"> <span class="notification-bar__icon"> <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> <span class="sr-only">Warning</span> </span> <span class="notification-bar__message">You are using an unsupported browser, upgrade to a newer version.</span> </div> <![endif]--> <noscript> <div class="notification-bar notification-bar--warning" role="status"> <span class="notification-bar__icon"> <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> <span class="sr-only">Warning</span> </span> <span class="notification-bar__message">Some features may not work without JavaScript. Please try enabling it if you encounter problems.</span> </div> </noscript> <div data-html-include="/_includes/unauthed/notification-banners/"></div> </div> <div data-html-include="/_includes/authed/flash-messages/"></div> <div data-html-include="/_includes/authed/session-notifications/"></div> <header class="site-header "> <div class="site-container"> <div class="split-layout"> <div class="split-layout"> <div> <a class="site-header__logo" href="/"> <img alt="PyPI" src="/static/images/logo-small.8998e9d1.svg"> </a> </div> <form class="search-form search-form--primary" action="/search/" role="search"> <label for="search" class="sr-only">Search PyPI</label> <input id="search" class="search-form__search" type="text" name="q" placeholder="Search projects" value="" autocomplete="off" autocapitalize="off" spellcheck="false" data-controller="search-focus" data-action="keydown@window->search-focus#focusSearchField" data-search-focus-target="searchField"> <button type="submit" class="search-form__button"> <i class="fa fa-search" aria-hidden="true"></i> <span class="sr-only">Search</span> </button> </form> </div> <div data-html-include="/_includes/authed/current-user-indicator/"> <div id="user-indicator" class="horizontal-menu horizontal-menu--light horizontal-menu--tall"> <nav class="horizontal-menu horizontal-menu--light horizontal-menu--tall hide-on-tablet" aria-label="Main navigation"> <ul> <li class="horizontal-menu__item"><a href="/help/" class="horizontal-menu__link">Help</a></li> <li class="horizontal-menu__item"><a href="/sponsors/" class="horizontal-menu__link">Sponsors</a></li> <li class="horizontal-menu__item"><a href="/account/login/" class="horizontal-menu__link">Log in</a></li> <li class="horizontal-menu__item"><a href="/account/register/" class="horizontal-menu__link">Register</a></li> </ul> </nav> <nav class="dropdown dropdown--on-menu hidden show-on-tablet" aria-label="Main navigation"> <button type="button" class="horizontal-menu__link dropdown__trigger" aria-haspopup="true" aria-expanded="false" aria-label="View menu"> Menu <span class="dropdown__trigger-caret"> <i class="fa fa-caret-down" aria-hidden="true"></i> </span> </button> <ul class="dropdown__content" aria-hidden="true" aria-label="Main menu"> <li><a class="dropdown__link" href="/help/">Help</a></li> <li><a class="dropdown__link" href="/sponsors/">Sponsors</a></li> <li><a class="dropdown__link" href="/account/login/">Log in</a></li> <li><a class="dropdown__link" href="/account/register/">Register</a></li> </ul> </nav> </div> </div> </div> </div> </header> <div class="mobile-search"> <form class="search-form search-form--fullwidth" action="/search/" role="search"> <label for="mobile-search" class="sr-only">Search PyPI</label> <input id="mobile-search" class="search-form__search" type="text" name="q" placeholder="Search projects" value="" autocomplete="off" autocapitalize="off" spellcheck="false"> <button type="submit" class="search-form__button"> <i class="fa fa-search" aria-hidden="true"></i> <span class="sr-only">Search</span> </button> </form> </div> <main id="content"> <div class="banner"> <div class="package-header"> <div class="package-header__left"> <h1 class="package-header__name"> tryceratops 2.4.1 </h1> <div data-controller="clipboard"> <p class="package-header__pip-instructions"> <span id="pip-command" data-clipboard-target="source">pip install tryceratops</span> <button type="button" class="copy-tooltip copy-tooltip-s" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> <i class="fa fa-copy" aria-hidden="true"></i> <span class="sr-only">Copy PIP instructions</span> </button> </p> </div> </div> <div class="package-header__right"> <a class="status-badge status-badge--good" href="/project/tryceratops/"> <span>Latest version</span> </a> <p class="package-header__date"> Released: <time datetime="2024-10-30T16:42:38+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time> </p> </div> </div> </div> <div class="horizontal-section horizontal-section--grey horizontal-section--thin"> <div class="site-container"> <div data-html-include="/_includes/authed/administer-project-include/tryceratops"></div> <div class="split-layout split-layout--middle package-description"> <p class="package-description__summary">Prevent Exception Handling AntiPatterns</p> <div data-html-include="/_includes/authed/edit-project-button/tryceratops"></div> </div> </div> </div> <div data-controller="project-tabs"> <div class="tabs-container"> <div class="vertical-tabs"> <div class="vertical-tabs__tabs"> <div class="sidebar-section"> <h3 class="sidebar-section__title">Navigation</h3> <nav aria-label="Navigation for tryceratops"> <ul class="vertical-tabs__list" role="tablist"> <li role="tab"> <a id="description-tab" href="#description" data-project-tabs-target="tab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--is-active" aria-selected="true" aria-label="Project description. Focus will be moved to the description."> <i class="fa fa-align-left" aria-hidden="true"></i> Project description </a> </li> <li role="tab"> <a id="history-tab" href="#history" data-project-tabs-target="tab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon" aria-label="Release history. Focus will be moved to the history panel."> <i class="fa fa-history" aria-hidden="true"></i> Release history </a> </li> <li role="tab"> <a id="files-tab" href="#files" data-project-tabs-target="tab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon" aria-label="Download files. Focus will be moved to the project files."> <i class="fa fa-download" aria-hidden="true"></i> Download files </a> </li> </ul> </nav> </div> <div class="sidebar-section verified"> <h3 class="sidebar-section__title"> Verified details <i class="fa fa-circle-check check" title="Verified by PyPI on 2024-10-30"></i> </h3> <small><i>These details have been <a href="https://docs.pypi.org/project_metadata/#verified-details">verified by PyPI</a></i></small> <h6>Maintainers</h6> <span class="sidebar-section__maintainer"> <a href="/user/guilatrova/" aria-label=""> <span class="sidebar-section__user-gravatar"> <img src="https://pypi-camo.freetls.fastly.net/7525dceeb9b3e6ba0adcfaeb49fedeb21e36c9ca/68747470733a2f2f7365637572652e67726176617461722e636f6d2f6176617461722f62356435653261636662666665356432623962356438633862313730363165363f73697a653d3530" height="50" width="50" alt="Avatar for guilatrova from gravatar.com" title="Avatar for guilatrova from gravatar.com"> </span> <span class="sidebar-section__user-gravatar-text"> guilatrova </span> </a> </span> </div> <div class="sidebar-section unverified"> <h3 class="sidebar-section__title">Unverified details</h3> <small><i>These details have <b>not</b> been verified by PyPI</i></small> <h6>Project links</h6> <ul class="vertical-tabs__list"> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops" rel="nofollow"> <i class="fas fa-home" aria-hidden="true"></i>Homepage </a> </li> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops/blob/main/CHANGELOG.md" rel="nofollow"> <i class="fas fa-scroll" aria-hidden="true"></i>Changelog </a> </li> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops" rel="nofollow"> <i class="fab fa-github" aria-hidden="true"></i>Repository </a> </li> </ul> <div class="sidebar-section unverified"> <h6>Meta</h6> <ul> <li> <span> <strong>License:</strong> MIT License (MIT) </span> </li> <li> <span> <strong>Author:</strong> <a href="mailto:hello@guilatrova.dev">Guilherme Latrova</a> </span> </li> <li class="tags"> <span> <i class="fa fa-tags" aria-hidden="true"></i> <span class="sr-only">Tags</span> <span class="package-keyword"> lint, </span> <span class="package-keyword"> try, </span> <span class="package-keyword"> except </span> </span> </li> <li> <span> <strong>Requires:</strong> Python &lt;4.0, &gt;=3.8.1 </span> </li> </ul> </div> <div class="sidebar-section unverified"> <h6 class="sidebar-section__title">Classifiers</h6> <ul class="sidebar-section__classifiers"> <li> <strong>Development Status</strong> <ul> <li> <a href="/search/?c=Development+Status+%3A%3A+4+-+Beta"> 4 - Beta </a> </li> </ul> </li> <li> <strong>Environment</strong> <ul> <li> <a href="/search/?c=Environment+%3A%3A+Console"> Console </a> </li> </ul> </li> <li> <strong>Intended Audience</strong> <ul> <li> <a href="/search/?c=Intended+Audience+%3A%3A+Developers"> Developers </a> </li> </ul> </li> <li> <strong>License</strong> <ul> <li> <a href="/search/?c=License+%3A%3A+OSI+Approved+%3A%3A+MIT+License"> OSI Approved :: MIT License </a> </li> </ul> </li> <li> <strong>Operating System</strong> <ul> <li> <a href="/search/?c=Operating+System+%3A%3A+OS+Independent"> OS Independent </a> </li> </ul> </li> <li> <strong>Programming Language</strong> <ul> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3"> Python :: 3 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.9"> Python :: 3.9 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.10"> Python :: 3.10 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.11"> Python :: 3.11 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.12"> Python :: 3.12 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.13"> Python :: 3.13 </a> </li> </ul> </li> <li> <strong>Topic</strong> <ul> <li> <a href="/search/?c=Topic+%3A%3A+Software+Development+%3A%3A+Libraries+%3A%3A+Python+Modules"> Software Development :: Libraries :: Python Modules </a> </li> <li> <a href="/search/?c=Topic+%3A%3A+Software+Development+%3A%3A+Quality+Assurance"> Software Development :: Quality Assurance </a> </li> </ul> </li> </ul> </div> </div><div class="sidebar-section" data-ea-publisher="psf" data-ea-type="psf" data-ea-keywords="pypi-sidebar"></div> <div data-html-include="https://pypi.org/_includes/authed/submit-malware-report/tryceratops"></div> </div> <div class="vertical-tabs__panel"> <!-- mobile menu --> <nav aria-label="Navigation for tryceratops"> <ul class="vertical-tabs__list" role="tablist"> <li role="tab"> <a id="mobile-description-tab" href="#description" data-project-tabs-target="mobileTab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--mobile vertical-tabs__tab--no-top-border vertical-tabs__tab--is-active" aria-selected="true" aria-label="Project description. Focus will be moved to the description."> <i class="fa fa-align-left" aria-hidden="true"></i> Project description </a> </li> <li role="tab"> <a id="mobile-data-tab" href="#data" data-project-tabs-target="mobileTab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--mobile" aria-label="Project details. Focus will be moved to the project details."> <i class="fa fa-info-circle" aria-hidden="true"></i> Project details </a> </li> <li role="tab"> <a id="mobile-history-tab" href="#history" data-project-tabs-target="mobileTab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--mobile" aria-label="Release history. Focus will be moved to the history panel."> <i class="fa fa-history" aria-hidden="true"></i> Release history </a> </li> <li role="tab"> <a id="mobile-files-tab" href="#files" data-project-tabs-target="mobileTab" data-action="project-tabs#onTabClick" class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--mobile" aria-label="Download files. Focus will be moved to the project files."> <i class="fa fa-download" aria-hidden="true"></i> Download files </a> </li> </ul> </nav> <div id="description" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="description-tab mobile-description-tab" tabindex="-1"> <h2 class="page-title">Project description</h2> <div class="project-description"> <p align=center> <img src="https://pypi-camo.freetls.fastly.net/928a67b5e469761b8d32258463c5d7238709d9f9/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6775696c6174726f76612f74727963657261746f70732f6d61696e2f696d672f6c6f676f2e706e67"> </p> <h2 align=center>Prevent Exception Handling AntiPatterns in Python</h2> <p align=center> <a href="https://github.com/guilatrova/tryceratops/actions" rel=nofollow><img alt="Actions Status" src="https://pypi-camo.freetls.fastly.net/d2adc4c4841d8c309c72c1b791b505144fcd90b7/68747470733a2f2f6769746875622e636f6d2f6775696c6174726f76612f74727963657261746f70732f776f726b666c6f77732f43492f62616467652e737667"></a> <a href="https://pypi.org/project/tryceratops/" rel=nofollow><img alt=PyPI src="https://pypi-camo.freetls.fastly.net/1b7d35f366bd169370688044bb172243e69decdb/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f74727963657261746f7073"></a> <img src="https://pypi-camo.freetls.fastly.net/a3ea24feedca10d0f36ad7bf4af80674fb681582/68747470733a2f2f62616467656e2e6e65742f707970692f707974686f6e2f74727963657261746f7073"> <a href="https://github.com/relekang/python-semantic-release" rel=nofollow><img alt="Semantic Release" src="https://pypi-camo.freetls.fastly.net/52d466e89928168031ccfb87e50063618763cfa9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2532302532302546302539462539332541362546302539462539412538302d73656d616e7469632d2d72656c656173652d6531303037392e737667"></a> <a href="https://github.com/guilatrova/tryceratops/blob/main/LICENSE" rel=nofollow><img alt=GitHub src="https://pypi-camo.freetls.fastly.net/f07b41728d904400eb241de43cc2314382b1400e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6775696c6174726f76612f74727963657261746f7073"></a> <a href="https://pepy.tech/project/tryceratops/" rel=nofollow><img alt=Downloads src="https://pypi-camo.freetls.fastly.net/c8cce8b2bd11433315699ca4b6ee285e29628b63/68747470733a2f2f7374617469632e706570792e746563682f706572736f6e616c697a65642d62616467652f74727963657261746f70733f706572696f643d746f74616c26756e6974733d696e7465726e6174696f6e616c5f73797374656d266c6566745f636f6c6f723d677265792672696768745f636f6c6f723d626c7565266c6566745f746578743d254630253946254136253936253230446f776e6c6f616473"></a> <a href="https://github.com/psf/black" rel=nofollow><img alt="Code style: black" src="https://pypi-camo.freetls.fastly.net/fbfdc7754183ecf079bc71ddeabaf88f6cbc5c00/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652532307374796c652d626c61636b2d3030303030302e737667"></a> <a href="https://github.com/guilatrova/tryceratops" rel=nofollow><img alt="try/except style: tryceratops" src="https://pypi-camo.freetls.fastly.net/3e0a7757db9a484202d13c8963d45c8dd4bfe3c4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7472792532466578636570742532307374796c652d74727963657261746f70732532302546302539462541362539362545322539432541382d626c61636b"></a> <a href="https://twitter.com/intent/user?screen_name=guilatrova" rel=nofollow><img alt="Follow guilatrova" src="https://pypi-camo.freetls.fastly.net/912fb10d077ec134d4af10f7b6f8f8bbd2d5865e/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f6775696c6174726f76613f7374796c653d736f6369616c"></a> </p> <p>Inspired by <a href="https://blog.guilatrova.dev/handling-exceptions-in-python-like-a-pro/" rel=nofollow>this blog post</a>. I described <a href="https://blog.guilatrova.dev/project-tryceratops/" rel=nofollow>the building process of this tool here</a>.</p> <blockquote> <p>“For those who like dinosaurs 🦖 and clean try/except ✨ blocks.”</p> </blockquote> <p><strong>Summary</strong></p> <ul> <li><a href=#installation-and-usage rel=nofollow>Installation and usage</a> <ul> <li><a href=#installation rel=nofollow>Installation</a></li> <li><a href=#usage rel=nofollow>Usage</a></li> <li><a href=#flake8-plugin rel=nofollow><code>flake8</code> Plugin</a></li> </ul> </li> <li><a href=#violations rel=nofollow>Violations</a> <ul> <li><a href=#autofix-support rel=nofollow>Autofix support</a></li> <li><a href=#ignoring-violations rel=nofollow>Ignoring violations</a></li> <li><a href=#configuration rel=nofollow>Configuration</a></li> </ul> </li> <li><a href=#pre-commit rel=nofollow>Pre-commit</a></li> <li><a href=#show-your-style rel=nofollow>Show your style</a></li> <li><a href=#extra-resources rel=nofollow>Extra Resources</a></li> <li><a href=#contributing rel=nofollow>Contributing</a></li> <li><a href=#change-log rel=nofollow>Change log</a></li> <li><a href=#license rel=nofollow>License</a></li> <li><a href=#credits rel=nofollow>Credits</a></li> </ul> <hr> <h2>Installation and usage</h2> <h3>Installation</h3> <pre><code>pip install tryceratops </code></pre> <p>OR</p> <pre><code>poetry add -D tryceratops </code></pre> <h3>Usage</h3> <pre><code>tryceratops [filename or dir...] </code></pre> <p>You can enable experimental analyzers by running:</p> <pre><code>tryceratops --experimental [filename or dir...] </code></pre> <p>You can ignore specific violations by using: <code>--ignore TRYXXX</code> repeatedly:</p> <pre><code>tryceratops --ignore TRY201 --ignore TRY202 [filename or dir...] </code></pre> <p>You can exclude dirs by using: <code>--exclude dir/path</code> repeatedly:</p> <pre><code>tryceratops --exclude tests --exclude .venv [filename or dir...] </code></pre> <p>You can also autofix some violations:</p> <pre><code>tryceratops --autofix [filename or dir...] </code></pre> <p><img src="https://pypi-camo.freetls.fastly.net/aee91a856e2e0628b8f2ea57538c969305f6ab15/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6775696c6174726f76612f74727963657261746f70732f6d61696e2f696d672f74727963657261746f70732d6578616d706c65332e676966" alt=example></p> <h3><a href="https://github.com/PyCQA/flake8" rel=nofollow><code>flake8</code></a> Plugin</h3> <p>🦖 Tryceratops is also a plugin for <code>flake8</code>, so you can:</p> <pre><code>❯ flake8 --select TRY src/tests/samples/violations/call_raise_vanilla.py src/tests/samples/violations/call_raise_vanilla.py:13:9: TRY002 Create your own exception src/tests/samples/violations/call_raise_vanilla.py:13:9: TRY003 Avoid specifying long messages outside the exception class src/tests/samples/violations/call_raise_vanilla.py:21:9: TRY201 Simply use 'raise' without specifying exception object again </code></pre> <h2>Violations</h2> <p>All violations and its descriptions can be found in <a href="https://github.com/guilatrova/tryceratops/tree/main/docs/violations" rel=nofollow>docs</a>.</p> <h3>Autofix support</h3> <p>So far, autofix only supports violations: <a href="docs/violations/TRY200.md" rel=nofollow>TRY200</a>, <a href="docs/violations/TRY201.md" rel=nofollow>TRY201</a>, and <a href="docs/violations/TRY400.md" rel=nofollow>TRY400</a>.</p> <h3>Ignoring violations</h3> <p>If you want to ignore a violation in a specific file, you can either:</p> <ul> <li>Add a comment with <code>noqa</code> to the top of the file you want to ignore</li> <li>Add a comment with <code>noqa</code> to the line you want to ignore</li> <li>Add a comment with <code>noqa: CODE</code> to the line you want to ignore a specific violation</li> </ul> <p>Example:</p> <pre lang=py><span class=k>def</span> <span class=nf>verbose_reraise_1</span><span class=p>():</span> <span class=k>try</span><span class=p>:</span> <span class=n>a</span> <span class=o>=</span> <span class=mi>1</span> <span class=k>except</span> <span class=ne>Exception</span> <span class=k>as</span> <span class=n>ex</span><span class=p>:</span> <span class=k>raise</span> <span class=n>ex</span> <span class=c1># noqa: TRY202</span> </pre> <h3>Configuration</h3> <p>You can set up a <code>pyproject.toml</code> file to set rules. This is useful to avoid reusing the same CLI flags over and over again and helps to define the structure of your project.</p> <p>Example:</p> <pre lang=toml><span class=k>[tool.tryceratops]</span> <span class=n>exclude</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=p>[</span><span class=s2>"samples"</span><span class=p>]</span> <span class=n>ignore</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=p>[</span><span class=s2>"TRY002"</span><span class=p>,</span><span class=w> </span><span class=s2>"TRY200"</span><span class=p>,</span><span class=w> </span><span class=s2>"TRY300"</span><span class=p>]</span> <span class=n>experimental</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=kc>false</span> <span class=n>check_pickable</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=kc>false</span> <span class=n>allowed_base_exceptions</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=p>[</span><span class=s2>"MyAppBase"</span><span class=p>]</span> </pre> <p>CLI flags always overwrite the config file.</p> <h2>Pre-commit</h2> <p>If you wish to use pre-commit, add this:</p> <pre lang=yaml><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class=nt>repo</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">https://github.com/guilatrova/tryceratops</span> <span class=w> </span><span class=nt>rev</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">v2.4.1</span> <span class=w> </span><span class=nt>hooks</span><span class=p>:</span> <span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class=nt>id</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">tryceratops</span> </pre> <h2>Show your style</h2> <p><a href="https://github.com/guilatrova/tryceratops" rel=nofollow><img src="https://pypi-camo.freetls.fastly.net/3e0a7757db9a484202d13c8963d45c8dd4bfe3c4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7472792532466578636570742532307374796c652d74727963657261746f70732532302546302539462541362539362545322539432541382d626c61636b" alt="try/except style: tryceratops"></a></p> <p>Add this fancy badge to your project's <code>README.md</code>:</p> <pre lang=md>[<span class=nt>![try/except style: tryceratops</span>](<span class=na>https://img.shields.io/badge/try%2Fexcept%20style-tryceratops%20%F0%9F%A6%96%E2%9C%A8-black</span>)](https://github.com/guilatrova/tryceratops) </pre> <h2>Extra Resources</h2> <p>If you want to read more about:</p> <ul> <li><a href="https://blog.guilatrova.dev/how-to-structure-exception-in-python-like-a-pro/" rel=nofollow>How to structure exceptions in Python 🐍 🏗️ 💣</a></li> <li><a href="https://blog.guilatrova.dev/how-to-log-in-python-like-a-pro/" rel=nofollow>How to log in Python 🐍🌴</a></li> <li><a href="https://amzn.to/3bEVHpG" rel=nofollow>Book: Effective Python</a></li> </ul> <h2>Contributing</h2> <p>Thank you for considering making Tryceratops better for everyone!</p> <p>Refer to <a href="docs/CONTRIBUTING.md" rel=nofollow>Contributing docs</a>.</p> <h2>Change log</h2> <p>See <a href=CHANGELOG.md rel=nofollow>CHANGELOG</a>.</p> <h2>License</h2> <p>MIT</p> <h2>Credits</h2> <p>Thanks to God for the inspiration 🙌 ☁️ ☀️</p> <p>The <a href="https://github.com/psf/black" rel=nofollow>black</a> project for insights.</p> </div> </div> <div id="data" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="mobile-data-tab" tabindex="-1"> <h2 class="page-title">Project details</h2> <div class="sidebar-section verified"> <h3 class="sidebar-section__title"> Verified details <i class="fa fa-circle-check check" title="Verified by PyPI on 2024-10-30"></i> </h3> <small><i>These details have been <a href="https://docs.pypi.org/project_metadata/#verified-details">verified by PyPI</a></i></small> <h6>Maintainers</h6> <span class="sidebar-section__maintainer"> <a href="/user/guilatrova/" aria-label=""> <span class="sidebar-section__user-gravatar"> <img src="https://pypi-camo.freetls.fastly.net/7525dceeb9b3e6ba0adcfaeb49fedeb21e36c9ca/68747470733a2f2f7365637572652e67726176617461722e636f6d2f6176617461722f62356435653261636662666665356432623962356438633862313730363165363f73697a653d3530" height="50" width="50" alt="Avatar for guilatrova from gravatar.com" title="Avatar for guilatrova from gravatar.com"> </span> <span class="sidebar-section__user-gravatar-text"> guilatrova </span> </a> </span> </div> <div class="sidebar-section unverified"> <h3 class="sidebar-section__title">Unverified details</h3> <small><i>These details have <b>not</b> been verified by PyPI</i></small> <h6>Project links</h6> <ul class="vertical-tabs__list"> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops" rel="nofollow"> <i class="fas fa-home" aria-hidden="true"></i>Homepage </a> </li> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops/blob/main/CHANGELOG.md" rel="nofollow"> <i class="fas fa-scroll" aria-hidden="true"></i>Changelog </a> </li> <li> <a class="vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed" href="https://github.com/guilatrova/tryceratops" rel="nofollow"> <i class="fab fa-github" aria-hidden="true"></i>Repository </a> </li> </ul> <div class="sidebar-section unverified"> <h6>Meta</h6> <ul> <li> <span> <strong>License:</strong> MIT License (MIT) </span> </li> <li> <span> <strong>Author:</strong> <a href="mailto:hello@guilatrova.dev">Guilherme Latrova</a> </span> </li> <li class="tags"> <span> <i class="fa fa-tags" aria-hidden="true"></i> <span class="sr-only">Tags</span> <span class="package-keyword"> lint, </span> <span class="package-keyword"> try, </span> <span class="package-keyword"> except </span> </span> </li> <li> <span> <strong>Requires:</strong> Python &lt;4.0, &gt;=3.8.1 </span> </li> </ul> </div> <div class="sidebar-section unverified"> <h6 class="sidebar-section__title">Classifiers</h6> <ul class="sidebar-section__classifiers"> <li> <strong>Development Status</strong> <ul> <li> <a href="/search/?c=Development+Status+%3A%3A+4+-+Beta"> 4 - Beta </a> </li> </ul> </li> <li> <strong>Environment</strong> <ul> <li> <a href="/search/?c=Environment+%3A%3A+Console"> Console </a> </li> </ul> </li> <li> <strong>Intended Audience</strong> <ul> <li> <a href="/search/?c=Intended+Audience+%3A%3A+Developers"> Developers </a> </li> </ul> </li> <li> <strong>License</strong> <ul> <li> <a href="/search/?c=License+%3A%3A+OSI+Approved+%3A%3A+MIT+License"> OSI Approved :: MIT License </a> </li> </ul> </li> <li> <strong>Operating System</strong> <ul> <li> <a href="/search/?c=Operating+System+%3A%3A+OS+Independent"> OS Independent </a> </li> </ul> </li> <li> <strong>Programming Language</strong> <ul> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3"> Python :: 3 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.9"> Python :: 3.9 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.10"> Python :: 3.10 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.11"> Python :: 3.11 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.12"> Python :: 3.12 </a> </li> <li> <a href="/search/?c=Programming+Language+%3A%3A+Python+%3A%3A+3.13"> Python :: 3.13 </a> </li> </ul> </li> <li> <strong>Topic</strong> <ul> <li> <a href="/search/?c=Topic+%3A%3A+Software+Development+%3A%3A+Libraries+%3A%3A+Python+Modules"> Software Development :: Libraries :: Python Modules </a> </li> <li> <a href="/search/?c=Topic+%3A%3A+Software+Development+%3A%3A+Quality+Assurance"> Software Development :: Quality Assurance </a> </li> </ul> </li> </ul> </div> </div> <br> </div> <div id="history" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="history-tab mobile-history-tab" tabindex="-1"> <h2 class="page-title split-layout"> <span>Release history</span> <span class="reset-text margin-top"> <a href="/help/#project-release-notifications">Release notifications</a> | <a href="/rss/project/tryceratops/releases.xml">RSS feed <i class="fa fa-rss" aria-hidden="true"></i></a> </span> </h2> <div class="release-timeline"> <div class="release release--latest release--current"> <div class="release__meta"> <span class="badge">This version</span> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/blue-cube.572a5bfb.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.4.1/"> <p class="release__version"> 2.4.1 </p> <p class="release__version-date"> <time datetime="2024-10-30T16:42:38+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.4.0/"> <p class="release__version"> 2.4.0 </p> <p class="release__version-date"> <time datetime="2024-08-19T15:30:01+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Aug 19, 2024 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.3.3/"> <p class="release__version"> 2.3.3 </p> <p class="release__version-date"> <time datetime="2024-07-08T16:39:33+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 8, 2024 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.3.2/"> <p class="release__version"> 2.3.2 </p> <p class="release__version-date"> <time datetime="2023-05-23T11:13:42+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 23, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.3.1/"> <p class="release__version"> 2.3.1 </p> <p class="release__version-date"> <time datetime="2023-05-20T14:59:35+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 20, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.3.0/"> <p class="release__version"> 2.3.0 </p> <p class="release__version-date"> <time datetime="2023-05-20T11:16:15+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 20, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.2.0/"> <p class="release__version"> 2.2.0 </p> <p class="release__version-date"> <time datetime="2023-05-20T10:04:05+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 20, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.1.1/"> <p class="release__version"> 2.1.1 </p> <p class="release__version-date"> <time datetime="2023-05-18T08:28:32+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 18, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.1.0/"> <p class="release__version"> 2.1.0 </p> <p class="release__version-date"> <time datetime="2023-05-13T18:44:08+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> May 13, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/2.0.0/"> <p class="release__version"> 2.0.0 </p> <p class="release__version-date"> <time datetime="2023-04-29T20:17:26+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Apr 29, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/1.2.0/"> <p class="release__version"> 1.2.0 </p> <p class="release__version-date"> <time datetime="2023-04-29T18:22:45+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Apr 29, 2023 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/1.1.0/"> <p class="release__version"> 1.1.0 </p> <p class="release__version-date"> <time datetime="2022-04-30T13:28:47+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Apr 30, 2022 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/1.0.1/"> <p class="release__version"> 1.0.1 </p> <p class="release__version-date"> <time datetime="2021-12-31T22:24:46+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Dec 31, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/1.0.0/"> <p class="release__version"> 1.0.0 </p> <p class="release__version-date"> <time datetime="2021-11-22T10:01:20+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Nov 22, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.6.1/"> <p class="release__version"> 0.6.1 </p> <p class="release__version-date"> <time datetime="2021-11-17T10:53:14+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Nov 17, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.6.0/"> <p class="release__version"> 0.6.0 </p> <p class="release__version-date"> <time datetime="2021-09-12T18:36:23+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Sep 12, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.5.0/"> <p class="release__version"> 0.5.0 </p> <p class="release__version-date"> <time datetime="2021-07-31T20:12:13+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 31, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.4.0/"> <p class="release__version"> 0.4.0 </p> <p class="release__version-date"> <time datetime="2021-07-30T23:58:28+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 30, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.3.0/"> <p class="release__version"> 0.3.0 </p> <p class="release__version-date"> <time datetime="2021-07-21T21:50:31+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 21, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.6/"> <p class="release__version"> 0.2.6 </p> <p class="release__version-date"> <time datetime="2021-07-21T01:03:24+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 21, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.5/"> <p class="release__version"> 0.2.5 </p> <p class="release__version-date"> <time datetime="2021-07-17T02:07:32+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 17, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.4/"> <p class="release__version"> 0.2.4 </p> <p class="release__version-date"> <time datetime="2021-07-17T01:09:18+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 17, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.3/"> <p class="release__version"> 0.2.3 </p> <p class="release__version-date"> <time datetime="2021-07-01T13:50:45+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jul 1, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.2/"> <p class="release__version"> 0.2.2 </p> <p class="release__version-date"> <time datetime="2021-06-30T15:00:37+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 30, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.1/"> <p class="release__version"> 0.2.1 </p> <p class="release__version-date"> <time datetime="2021-06-30T14:56:08+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 30, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.2.0/"> <p class="release__version"> 0.2.0 </p> <p class="release__version-date"> <time datetime="2021-06-30T14:25:04+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 30, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.9/"> <p class="release__version"> 0.1.9 </p> <p class="release__version-date"> <time datetime="2021-06-28T11:57:17+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 28, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.8/"> <p class="release__version"> 0.1.8 </p> <p class="release__version-date"> <time datetime="2021-06-25T12:03:51+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 25, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.7/"> <p class="release__version"> 0.1.7 </p> <p class="release__version-date"> <time datetime="2021-06-23T12:43:38+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 23, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.6/"> <p class="release__version"> 0.1.6 </p> <p class="release__version-date"> <time datetime="2021-06-23T11:50:45+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 23, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.4/"> <p class="release__version"> 0.1.4 </p> <p class="release__version-date"> <time datetime="2021-06-21T21:38:26+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 21, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.3/"> <p class="release__version"> 0.1.3 </p> <p class="release__version-date"> <time datetime="2021-06-21T13:34:11+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 21, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.2/"> <p class="release__version"> 0.1.2 </p> <p class="release__version-date"> <time datetime="2021-06-20T22:45:21+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 20, 2021 </time> </p> </a> </div> <div class="release"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1.1/"> <p class="release__version"> 0.1.1 </p> <p class="release__version-date"> <time datetime="2021-06-20T22:24:40+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 20, 2021 </time> </p> </a> </div> <div class="release release--oldest"> <div class="release__meta"> </div> <div class="release__graphic"> <div class="release__line"></div> <img class="release__node" alt="" src="https://pypi.org/static/images/white-cube.2351a86c.svg"> </div> <a class="card release__card" href="/project/tryceratops/0.1/"> <p class="release__version"> 0.1 </p> <p class="release__version-date"> <time datetime="2021-06-20T18:46:47+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Jun 20, 2021 </time> </p> </a> </div> </div> </div> <div id="files" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="files-tab mobile-files-tab" tabindex="-1"> <h2 class="page-title">Download files</h2> <p>Download the file for your platform. If you're not sure which to choose, learn more about <a href="https://packaging.python.org/tutorials/installing-packages/" title="External link" target="_blank" rel="noopener">installing packages</a>.</p> <h3> Source Distribution </h3> <div class="file"> <div class="file__graphic"> <i class="far fa-file" aria-hidden="true"></i> </div> <div class="card file__card"> <a href="https://files.pythonhosted.org/packages/2a/d3/43c2c190bb6b01decc92d87538b451d7fe8070aaaf18aa1e166bf432754e/tryceratops-2.4.1.tar.gz"> tryceratops-2.4.1.tar.gz </a> (20.6 kB <a href="#tryceratops-2.4.1.tar.gz" data-project-tabs-target="tab" data-action="project-tabs#onTabClick">view details</a>) <p class="file__meta"> Uploaded <time datetime="2024-10-30T16:42:40+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time> <code>Source</code> </p> </div> </div> <h3> Built Distribution </h3> <div class="file"> <div class="file__graphic"> <i class="far fa-file" aria-hidden="true"></i> </div> <div class="card file__card"> <a href="https://files.pythonhosted.org/packages/27/b5/88caeba349f17b7fd37b61bc88f81c138b3b5149b4e2a9deec66eaad1bdb/tryceratops-2.4.1-py3-none-any.whl"> tryceratops-2.4.1-py3-none-any.whl </a> (27.4 kB <a href="#tryceratops-2.4.1-py3-none-any.whl" data-project-tabs-target="tab" data-action="project-tabs#onTabClick">view details</a>) <p class="file__meta"> Uploaded <time datetime="2024-10-30T16:42:38+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time> <code>Python 3</code> </p> </div> </div> </div> <div id="tryceratops-2.4.1.tar.gz" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="file-tab mobile-file-tab" tabindex="-1"> <h2 class="page-title">File details</h2> <p>Details for the file <code>tryceratops-2.4.1.tar.gz</code>.</p> <h3>File metadata</h3> <div> <ul> <li> Download URL: <a href="https://files.pythonhosted.org/packages/2a/d3/43c2c190bb6b01decc92d87538b451d7fe8070aaaf18aa1e166bf432754e/tryceratops-2.4.1.tar.gz"> tryceratops-2.4.1.tar.gz </a> </li> <li>Upload date: <time datetime="2024-10-30T16:42:40+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time></li> <li>Size: 20.6 kB</li> <li>Tags: Source</li> <li> Uploaded using Trusted Publishing? No </li> <li>Uploaded via: twine/3.8.0 pkginfo/1.11.1 readme-renderer/43.0 requests/2.32.3 requests-toolbelt/1.0.0 urllib3/2.2.2 tqdm/4.66.4 importlib-metadata/8.0.0 keyring/24.3.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.15</li> </ul> </div> <h3>File hashes</h3> <div> <table class="table table--hashes"> <caption class="sr-only">Hashes for tryceratops-2.4.1.tar.gz</caption> <thead> <tr> <th scope="col">Algorithm</th> <th scope="col">Hash digest</th> <th></th> </tr> </thead> <tbody> <tr data-controller="clipboard"> <th scope="row">SHA256</th> <td><code data-clipboard-target="source">fbfc14650004e27cd1e55ebb7c76b43ced04a4d3b4cbe42aac9d71e4623ed84d</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> <tr data-controller="clipboard"> <th scope="row">MD5</th> <td><code data-clipboard-target="source">79aa0f3f446a75ee7ffbde2285efc88d</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> <tr data-controller="clipboard"> <th scope="row">BLAKE2b-256</th> <td><code data-clipboard-target="source">2ad343c2c190bb6b01decc92d87538b451d7fe8070aaaf18aa1e166bf432754e</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> </tbody> </table> <p> <a href="https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode" title="External link" target="_blank" rel="noopener">See more details on using hashes here.</a> </p> </div> </div> <div id="tryceratops-2.4.1-py3-none-any.whl" data-project-tabs-target="content" class="vertical-tabs__content" role="tabpanel" aria-labelledby="file-tab mobile-file-tab" tabindex="-1"> <h2 class="page-title">File details</h2> <p>Details for the file <code>tryceratops-2.4.1-py3-none-any.whl</code>.</p> <h3>File metadata</h3> <div> <ul> <li> Download URL: <a href="https://files.pythonhosted.org/packages/27/b5/88caeba349f17b7fd37b61bc88f81c138b3b5149b4e2a9deec66eaad1bdb/tryceratops-2.4.1-py3-none-any.whl"> tryceratops-2.4.1-py3-none-any.whl </a> </li> <li>Upload date: <time datetime="2024-10-30T16:42:38+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> Oct 30, 2024 </time></li> <li>Size: 27.4 kB</li> <li>Tags: Python 3</li> <li> Uploaded using Trusted Publishing? No </li> <li>Uploaded via: twine/3.8.0 pkginfo/1.11.1 readme-renderer/43.0 requests/2.32.3 requests-toolbelt/1.0.0 urllib3/2.2.2 tqdm/4.66.4 importlib-metadata/8.0.0 keyring/24.3.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.15</li> </ul> </div> <h3>File hashes</h3> <div> <table class="table table--hashes"> <caption class="sr-only">Hashes for tryceratops-2.4.1-py3-none-any.whl</caption> <thead> <tr> <th scope="col">Algorithm</th> <th scope="col">Hash digest</th> <th></th> </tr> </thead> <tbody> <tr data-controller="clipboard"> <th scope="row">SHA256</th> <td><code data-clipboard-target="source">271b92367be89b243918a56361618607d2a9aa4aa4ba766ecfabd5f98c00480c</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> <tr data-controller="clipboard"> <th scope="row">MD5</th> <td><code data-clipboard-target="source">f732887eadbf71f6552763bfe17cb919</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> <tr data-controller="clipboard"> <th scope="row">BLAKE2b-256</th> <td><code data-clipboard-target="source">27b588caeba349f17b7fd37b61bc88f81c138b3b5149b4e2a9deec66eaad1bdb</code></td> <td class="table__align-right"> <button type="button" class="button button--small copy-tooltip copy-tooltip-w" data-action="clipboard#copy" data-clipboard-target="tooltip" data-clipboard-tooltip-value="Copy to clipboard"> Copy </button> </td> </tr> </tbody> </table> <p> <a href="https://pip.pypa.io/en/stable/topics/secure-installs/#hash-checking-mode" title="External link" target="_blank" rel="noopener">See more details on using hashes here.</a> </p> </div> </div> </div> </div> </div> </div> </main> <footer class="footer"> <div class="footer__logo"> <img src="/static/images/white-cube.2351a86c.svg" alt="" class="-js-white-cube"> </div> <div class="footer__menus"> <div class="footer__menu"> <h2>Help</h2> <nav aria-label="Help navigation"> <ul> <li><a href="https://packaging.python.org/tutorials/installing-packages/" title="External link" target="_blank" rel="noopener">Installing packages</a></li> <li><a href="https://packaging.python.org/tutorials/packaging-projects/" title="External link" target="_blank" rel="noopener">Uploading packages</a></li> <li><a href="https://packaging.python.org/" title="External link" target="_blank" rel="noopener">User guide</a></li> <li><a href="https://www.python.org/dev/peps/pep-0541/" title="External link" target="_blank" rel="noopener">Project name retention</a></li> <li><a href="/help/">FAQs</a></li> </ul> </nav> </div> <div class="footer__menu"> <h2>About PyPI</h2> <nav aria-label="About PyPI navigation"> <ul> <li><a href="https://blog.pypi.org" title="External link" target="_blank" rel="noopener">PyPI Blog</a></li> <li><a href="https://dtdg.co/pypi" title="External link" target="_blank" rel="noopener">Infrastructure dashboard</a></li> <li><a href="/stats/">Statistics</a></li> <li><a href="/trademarks/">Logos & trademarks</a></li> <li><a href="/sponsors/">Our sponsors</a></li> </ul> </nav> </div> <div class="footer__menu"> <h2>Contributing to PyPI</h2> <nav aria-label="How to contribute navigation"> <ul> <li><a href="/help/#feedback">Bugs and feedback</a></li> <li><a href="https://github.com/pypi/warehouse" title="External link" target="_blank" rel="noopener">Contribute on GitHub</a></li> <li><a href="https://hosted.weblate.org/projects/pypa/warehouse/" title="External link" target="_blank" rel="noopener">Translate PyPI</a></li> <li><a href="/sponsors/">Sponsor PyPI</a></li> <li><a href="https://github.com/pypi/warehouse/graphs/contributors" title="External link" target="_blank" rel="noopener">Development credits</a></li> </ul> </nav> </div> <div class="footer__menu"> <h2>Using PyPI</h2> <nav aria-label="Using PyPI navigation"> <ul> <li><a href="https://policies.python.org/pypi.org/Terms-of-Service/" title="External link" target="_blank" rel="noopener">Terms of Service</a></li> <li><a href="/security/">Report security issue</a></li> <li><a href="https://policies.python.org/python.org/code-of-conduct/" title="External link" target="_blank" rel="noopener">Code of conduct</a></li> <li><a href="https://policies.python.org/pypi.org/Privacy-Notice/" title="External link" target="_blank" rel="noopener">Privacy Notice</a></li> <li><a href="https://policies.python.org/pypi.org/Acceptable-Use-Policy/" title="External link" target="_blank" rel="noopener">Acceptable Use Policy</a></li> </ul> </nav> </div> </div> <hr class="footer__divider"> <div class="footer__text"> <p>Status:<a href="https://status.python.org/" title="External link" target="_blank" rel="noopener"> <span data-statuspage-domain="https://2p66nmmycsj3.statuspage.io">all systems operational</span></a> </p> <p> Developed and maintained by the Python community, for the Python community. <br> <a href="https://donate.pypi.org">Donate today!</a> </p> <p> "PyPI", "Python Package Index", and the blocks logos are registered <a href="/trademarks/">trademarks</a> of the <a href="https://www.python.org/psf-landing" target="_blank" rel="noopener">Python Software Foundation</a>.<br> </p> <p> © 2025 <a href="https://www.python.org/psf-landing/" title="External link" target="_blank" rel="noopener">Python Software Foundation</a><br> <a href="/sitemap/">Site map</a> </p> </div> <div class="centered hide-on-desktop"> <button type="button" class="button button--switch-to-desktop hidden" data-viewport-toggle-target="switchToDesktop" data-action="viewport-toggle#switchToDesktop"> Switch to desktop version </button> </div> </footer> <div class="language-switcher"> <form action="/locale/"> <ul> <li> <button class="language-switcher__selected" name="locale_id" value="en" type="submit" > English </button> </li> <li> <button name="locale_id" value="es" type="submit" > español </button> </li> <li> <button name="locale_id" value="fr" type="submit" > français </button> </li> <li> <button name="locale_id" value="ja" type="submit" > 日本語 </button> </li> <li> <button name="locale_id" value="pt_BR" type="submit" > português (Brasil) </button> </li> <li> <button name="locale_id" value="uk" type="submit" > українська </button> </li> <li> <button name="locale_id" value="el" type="submit" > Ελληνικά </button> </li> <li> <button name="locale_id" value="de" type="submit" > Deutsch </button> </li> <li> <button name="locale_id" value="zh_Hans" type="submit" > 中文 (简体) </button> </li> <li> <button name="locale_id" value="zh_Hant" type="submit" > 中文 (繁體) </button> </li> <li> <button name="locale_id" value="ru" type="submit" > русский </button> </li> <li> <button name="locale_id" value="he" type="submit" > עברית </button> </li> <li> <button name="locale_id" value="eo" type="submit" > Esperanto </button> </li> <li> <button name="locale_id" value="ko" type="submit" > 한국어 </button> </li> </ul> </form> </div> <div class="sponsors"> <p class="sponsors__title">Supported by</p> <div class="sponsors__divider"></div> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://aws.amazon.com/"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/ed7074cadad1a06f56bc520ad9bd3e00d0704c5b/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f6177732d77686974652d6c6f676f2d7443615473387a432e706e67" alt=AWS loading=lazy> <span class="sponsors__name">AWS</span> <span class="sponsors__service"> Cloud computing and Security Sponsor </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://www.datadoghq.com/"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/8855f7c063a3bdb5b0ce8d91bfc50cf851cc5c51/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f64617461646f672d77686974652d6c6f676f2d6668644c4e666c6f2e706e67" alt=Datadog loading=lazy> <span class="sponsors__name">Datadog</span> <span class="sponsors__service"> Monitoring </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://www.fastly.com/"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/df6fe8829cbff2d7f668d98571df1fd011f36192/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f666173746c792d77686974652d6c6f676f2d65684d3077735f6f2e706e67" alt=Fastly loading=lazy> <span class="sponsors__name">Fastly</span> <span class="sponsors__service"> CDN </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://careers.google.com/"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/420cc8cf360bac879e24c923b2f50ba7d1314fb0/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f676f6f676c652d77686974652d6c6f676f2d616734424e3774332e706e67" alt=Google loading=lazy> <span class="sponsors__name">Google</span> <span class="sponsors__service"> Download Analytics </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://www.pingdom.com/"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/d01053c02f3a626b73ffcb06b96367fdbbf9e230/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f70696e67646f6d2d77686974652d6c6f676f2d67355831547546362e706e67" alt=Pingdom loading=lazy> <span class="sponsors__name">Pingdom</span> <span class="sponsors__service"> Monitoring </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://getsentry.com/for/python"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/67af7117035e2345bacb5a82e9aa8b5b3e70701d/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f73656e7472792d77686974652d6c6f676f2d4a2d6b64742d706e2e706e67" alt=Sentry loading=lazy> <span class="sponsors__name">Sentry</span> <span class="sponsors__service"> Error logging </span> </a> <a class="sponsors__sponsor" target="_blank" rel="noopener" href="https://statuspage.io"> <img class=sponsors__image src="https://pypi-camo.freetls.fastly.net/b611884ff90435a0575dbab7d9b0d3e60f136466/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f707970692d6173736574732f73706f6e736f726c6f676f732f737461747573706167652d77686974652d6c6f676f2d5467476c6a4a2d502e706e67" alt=StatusPage loading=lazy> <span class="sponsors__name">StatusPage</span> <span class="sponsors__service"> Status page </span> </a> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10