That would break huge amounts of existing code. While better names
might have been nice from the start, improving the naming is nowhere
near enough benefit to justify such a disruptive change at this point
in Python's development.

Paul

On Fri, 24 Jun 2022 at 22:47, abed...@gmail.com <abedil...@gmail.com> wrote:
>
> I was reading some of Kevlin Henney's views on naming conventions, and I 
> realized that, of the 65 classes that make up Python's built-in exceptions, 
> only 8 (by my count) satisfy Henney's pretty basic concept of a good 
> Exception name:
>
> The name should represent whatever the problem is, and should do so directly 
> and specifically. To add Exception to the end is either redundant — so remove 
> it — or an indication of a poor name — so rename it.
>
> Those are:
> SystemExit, KeyboardInterrupt, GeneratorExit, Exception, StopIteration, 
> StopAsyncIteration, Warning, and BaseException (though Henney also 
> discourages the use of "Base" in a base-class's name)
>
> I'm sure there are others throughout the standard library too.
>
> I always caution novice programmers to err on the side of pragmatism over 
> dogmatic adherence to "sacred truths". To that end:
>
> 1) I realize changing built-in exception names would break backwards 
> compatibility and probably isn't worth doing. This post is more intended as 
> food for thought going forward and to bring more attention to Kevlin Henney's 
> ideas.
>
> 2) I think many of the built-in exceptions are actually fine, particularly 
> ones that represent a broad class of more specific exceptions like OSError. I 
> don't think OSError has a specific enough name to be raised on its own 
> (perhaps it should be abstract or otherwise not directly instantiable?), but 
> catching error categories can be pretty helpful even if they don't lend 
> themselves to explicit names.
>
> I would suggest a more ideal naming scheme would be something like the 
> following:
>
> BaseException -> Exception
> # The text for GeneratorExit seems to indicate that in Python, an Error is 
> considered a subclass of an Exception, so this naming seems more appropriate 
> though it contradicts other views on the distinction between Exception and 
> Error.
>
> SystemExit
> KeyboardInterrupt -> UserInterrupt
> #This is supposed to capture a user-initiated exit, whether it came from a 
> keyboard or a magic wand is generally much less relevant
> GeneratorExit
> Exception -> Error
>
> StopIteration
> StopAsyncIteration
> ArithmeticError
>
> FloatingPointError -> Not used, get rid of it?
> OverflowError -> Overflow
> ZeroDivisionError -> ZeroDivision or Undefined
>
> AssertionError -> Contradiction or AssertionViolation
> AttributeError
>
> + AttributeNotFound or AttributeUnavailable
> + AttributeUnassignable
>
> BufferError
>
> <specific errors>
>
> EOFError -> EndOfFile
> ImportError
>
> ModuleNotFoundError -> ModuleNotFound
>
> LookupError
>
> IndexError -> IndexOutOfBounds
> KeyError -> KeyNotFound
>
> MemoryError -> OutOfMemory
> NameError -> InvalidName (Not needed?)
>
> UnboundLocalError -> UnboundLocal
>
> OSError
>
> BlockingIOError -> BlockingIO
> ChildProcessError -> ChildProcessFailed
> ConnectionError
>
> BrokenPipeError -> BrokenPipe
> ConnectionAbortedError -> ConnectionAborted
> ConnectionRefusedError -> ConnectionRefused
> ConnectionResetError -> ConnectionReset
>
> FileExistsError -> FileAlreadyExists
> FileNotFoundError -> FileNotFound
> InterruptedError -> Interrupted
> IsADirectoryError -> NotAFile
> NotADirectoryError -> NotADirectory
> PermissionError -> PermissionDenied
> ProcessLookupError -> ProcessNotFound
> TimeoutError -> Timeout
>
> ReferenceError -> ReferentCollected?
> RuntimeError
>
> NotImplementedError -> NotImplemented
> RecursionError -> MaxRecursionDepthExceeded or RecursionOverflow
>
> SyntaxError
>
> IndentationError
>
> TabError -> InconsistentIndentation
>
> SystemError -> SystemFailure
> TypeError -> IncompatibleType
> ValueError
>
> UnicodeError
>
> UnicodeDecodeError
> UnicodeEncodeError
> UnicodeTranslateError
>
> Warning
> # Should this be under Error?
>
> DeprecationWarning -> Deprecated
> PendingDeprecationWarning -> Obsolete
> RuntimeWarning
> SyntaxWarning
> UserWarning
> FutureWarning
> ImportWarning
> UnicodeWarning
> BytesWarning
> EncodingWarning
> ResourceWarning
>
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at 
> https://mail.python.org/archives/list/python-ideas@python.org/message/DRF6EMT3QFPBVTS3S76EEMKHJDCHUHVQ/
> Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/G5YXUNFGWI2HI44WZDR5K3PO3QBAZR5B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to