Icecream: Never use print() to debug again in Python

This page summarizes the projects mentioned and recommended in the original post on

Our great sponsors
  • Scout APM - Less time debugging, more time building
  • SonarQube - Static code analysis for 29 languages.
  • SaaSHub - Software Alternatives and Reviews
  • icecream

    🍦 Never use print() to debug again.

    It seems like it was a coincidence. See comment thread:

  • q

    Quick and dirty debugging output for tired programmers. ⛺ (by zestyping)

    For an even easier-to-remember alternative, there’s q:

    All you need is `import q`. q works like a function (q(x)), like a variable (q|x and q/x, so you get different operator precedences) and like a decorator (@q), so it can be used in practically any circumstance for a quick debug print. Plus, the name sounds like you’re interrogating something.

  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • python-devtools

    Dev tools for python

    __builtins__['debug'] = debug


    This would work with icecream too.

    The second advantage of not needing the import is that CI fails if you forget to remove all debug() commands.

  • PySnooper

    Never use print for debugging again

    Funny, a few months back I added this sentence to PySnooper's readme:

    "PySnooper is a poor man's debugger. If you've used Bash, it's like set -x for Python, except it's fancier."

  • py_better_exchook

    nice Python exception hook replacement

    If you like this, you might also like my small debugging utility, a better_exchook replacement:

    Simple example:

        assert x == 4

  • ray

    Debug with Ray to fix problems faster (by spatie)

    I am the same, it's the most easy. Very interesting is that in the laravel php world currently an interesting product is gaining momentum: Ray (

    So basically it's dump with a lot of neat extras and instead of looking at the console of the script, or the website you are printing on you push this to a little desktop application, from every of your languages you are using. Something like log collection for everything on your desktop.

  • pdbpp

    pdb++, a drop-in replacement for pdb (the Python debugger)

    I like to use PDB++ which is a drop in replacement for PDB

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • panopticon

    Python tracing module to visualize code execution.

    I've built to easily trace function execution to handle a similar use case, except that it generates output for chrome://tracing instead of printing out lines.

    cPython's settrace/setprofile functionality enables so many cool tools.

  • pyset_x

    Like `set -x` in bash, for Python

    I started writing a very-alpha related tool, As the name implies, it's like `set -x` in bash, in that it prints every line as it executes. It's more useful for situations where you have some complicated control flow and it's not working exactly how you expect.

  • snoop

    A powerful set of Python debugging tools, based on PySnooper (by alexmojaki)

  • Puts Debuggerer

    Ruby library for improved puts debugging, automatically displaying bonus useful information such as source line number and source code.

    I was wondering if there was anything like this for Ruby. Turns out there is: With this library,

      pd bug_or_band

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts