Por que algumas exceções do Python são minúsculas? [fechadas]

8

No Python, as exceções são classes e são caracterizadas como tais. Por exemplo: OSError.

No entanto, existem algumas exceções, como as do módulo de soquete , nomeadas em minúsculas. Por exemplo: socket.timeout, socket.error.

Por que é isso?

BadHeuristics
fonte
2
Não tenho certeza se isso é responsável, mas é muito interessante.
Jared Smith
2
Autores diferentes? Não existem convenções de nomenclatura estabelecidas?
Johnny Mopp
2
A questão pode se resumir a algo semelhante a "Por que algumas funções do Python camelCase?" Algumas bibliotecas têm um estilo ligeiramente inconsistente que evoluiu com o tempo. Eu acho que o PEP-8 fala disso e foi uma tentativa de "colocar todos na mesma página", que foi parcialmente bem-sucedida.
ggorlen
2
Observe que as perguntas "por que" sobre o design da linguagem são geralmente consideradas fora de tópico aqui , pois não são "práticas" - no sentido de algo cuja resposta permita corrigir um erro ou alterar a maneira como você pratica a prática de programação. (Consulte os critérios "práticos, responsáveis" no quarto ponto de stackoverflow.com/help/on-topic , que é AND em outras condições).
Charles Duffy
1
Não concordo neste caso específico, @CharlesDuffy. Se eu não tivesse experiência com Python, poderia pensar que havia algo especial neles que significa que eu deveria lidar com eles de uma certa maneira ou que eles eram sutilmente diferentes de alguma outra maneira que provavelmente me morderia. Eu acho que é razoável perguntar por que eles não são como os outros.
Kirk Strauser

Respostas:

7

De acordo com os documentos,

exceção socket.error Um alias descontinuado de OSError.

Alterada na versão 3.3: Após o PEP 3151, essa classe foi transformada em um alias do OSError.

PEP 3151 diz

enquanto os tipos de exceção padrão residem no espaço para nome raiz, eles são visualmente distinguidos pelo fato de usarem a convenção CamelCase, enquanto quase todos os outros componentes internos usam nomes em minúsculas (exceto True, False, None, Ellipsis e NotImplemented)

Vishnudev
fonte
Mas por que não fazer exceções ao namespace não raiz CamelCase também? Torná-los em minúsculas não faz nada para resolver a poluição do espaço para nome.
BadHeuristics
1
É assim que o PSF quer que seja. Se você tiver alguma objeção, levante-a na seção de questões do PEP
Vishnudev
@Vishnudev O PSF não deseja que as exceções de soquete sejam minúsculas. Eles são artefatos históricos deixados para não quebrar o código.
Terry Jan Reedy
Talvez tenha sido declarado nos artigos do PEP após 3151, mas o artigo do PEP 3151 sugere o contrário, afirmando "enquanto quase todos os outros componentes internos usam nomes em minúsculas", o que significa que os componentes internos devem ter letras minúsculas. Eu vou excluir meu comentário se você achar que não é apropriado @TerryJanReedy
Vishnudev
@Vishnudev 'outros builtins usam nomes em minúsculas' (em python.org/dev/peps/pep-3151/#possible-objections ) refere-se a classes embutidas como int, float, complex, tuple, set, list, dict e alguns outros. Todas as exceções nos componentes internos , listadas em docs.python.org/3/library/exceptions.html#built-in-exceptions , são CamelCase. Exceções adicionais definidas em outros módulos devem seguir esse padrão, a menos que haja boas razões. Os soquetes datam de quando as exceções eram cadeias de caracteres em vez de classes e instâncias de classe. (A exclusão tornaria minhas respostas menos sensatas.)
Terry Jan Reedy