These errors can, and should, be defined by modules and projects as they are developed - so, there is no limited and "closed" set of errors like you are asking for.
Python introspection capabilities allow one to see, through the interactive console, which errors are defined as derived directly from "Exception" - but there could be more:
>>> [err.__name__ for err in Exception.__subclasses__()]
['TypeError', 'StopIteration', 'ImportError', 'OSError', 'EOFError', 'RuntimeError', 'NameError', 'AttributeError', 'SyntaxError', 'LookupError', 'ValueError', 'AssertionError', 'ArithmeticError', 'SystemError', 'ReferenceError', 'BufferError', 'MemoryError', 'Warning', 'error', 'Error']
Note that exception itself is derived from BaseException, which subclasses are not limited to "error" exceptions, but to Exceptions used in flow control as well:
>>> [err.__name__ for err in BaseException.__subclasses__()]
['Exception', 'GeneratorExit', 'SystemExit', 'KeyboardInterrupt']
Bottom line: knowing the total number of errors is impossible and irrelevant for learning the language. Each function/library you are dealing with can define new ones, and you should check the documentation to know which exceptions they can throw.
(On a side note, the __sublass__ method I used above does return a list of the classes that are direct descendants of that class. I them pick the __name__ attribute of each class to display)
The document posted by @GP89 in the comments will also show the errors which are not direct descendants of exception: https://docs.python.org/2/library/exceptions.html#exception-hierarchy
Answer from jsbueno on Stack Overflow