The two most important exceptions in Python There are over 60 exception types built into Python. And honestly, most of them you don't need to know about. But there are two you ought to memorize: TypeError, and ValueError. Both are well demonstrated with int(). int() accepts strings. If you write int("42"), it returns 42. But if you write int("forty two"), it doesn't return anything. Instead, it raises ValueError. ValueError means "I can take this type of data, but not this specific value." int() takes strings, but not all strings. Now, if you write int([42]), that also triggers an exception - raising TypeError. TypeError means "I cannot accept the type of data you are giving me." int() does not accept lists. Internalizing the above benefits you bigtime, in two ways. First, you spend less time in debugging hell. When you see a stack trace using one or the other, you more immediately know what went wrong, and how to fix it. That is Bigtime Benefit Number One. Number Two is more subtle: The code you write becomes more of a joy to work with, by you and others. Because it is more aligned with how Python itself works. When you write code raising TypeError, or ValueError, you do it congruently with how Python raises them. You avoid an 'uncanny alley' effect of mis-using these exceptions every Python coder sees every day. So reasoning about your code becomes smoother and simpler. All of which makes your coding life better. And better for those who work with you, interacting with your code. Which soon or sooner will come right back to benefit you too, in other ways. Something to think about.