Tại sao một số trường hợp ngoại lệ Python viết thường? [đóng cửa]


8

Trong Python, các ngoại lệ là các lớp và được bao bọc như vậy. Ví dụ : OSError.

Tuy nhiên, có một số trường hợp ngoại lệ, chẳng hạn như các trường hợp trong mô-đun ổ cắm , được đặt tên bằng chữ thường. Ví dụ: socket.timeout, socket.error.

Tại sao lại thế này?


2
Tôi không chắc điều này có thể trả lời được, nhưng nó rất thú vị.
Jared Smith

2
Tác giả khác nhau? Không có quy ước đặt tên thành lập?
Johnny Mopp

2
Câu hỏi có thể rút ra một cái gì đó tương tự như "Tại sao một số hàm Python camelCase?" Một số thư viện có phong cách hơi không nhất quán đã phát triển theo thời gian. Tôi nghĩ rằng PEP-8 nói lên điều này và là một nỗ lực "đưa mọi người vào cùng một trang" đã thành công một phần.
ggorlen

2
Lưu ý rằng các câu hỏi "tại sao" về thiết kế ngôn ngữ thường được coi là lạc đề ở đây , vì chúng không "thực tế" - theo nghĩa của câu trả lời sẽ cho phép bạn sửa lỗi hoặc thay đổi cách bạn thực hành của lập trình. (Xem tiêu chí "thực tế, có thể trả lời" trong điểm đạn thứ tư của stackoverflow.com/help/on-topic , được ANDed vào các điều kiện khác).
Charles Duffy

1
Tôi không đồng ý trong trường hợp cụ thể này, @CharlesDuffy. Nếu tôi không có kinh nghiệm với Python, tôi có thể nghĩ rằng có điều gì đó đặc biệt về chúng có nghĩa là tôi nên xử lý chúng theo một cách nhất định hoặc chúng khác biệt một cách tinh tế theo một cách khác có khả năng cắn tôi. Tôi nghĩ thật hợp lý khi hỏi tại sao họ không thích những người khác.
Kirk Strauser

Câu trả lời:


7

Theo các tài liệu,

ngoại lệ socket.error Một bí danh không dùng nữa của OSError.

Thay đổi trong phiên bản 3.3: Sau PEP 3151, lớp này được tạo thành bí danh của OSError.

PEP 3151 nói

trong khi các loại ngoại lệ tiêu chuẩn sống trong không gian tên gốc, chúng được phân biệt trực quan bởi thực tế là chúng sử dụng quy ước CamelCase, trong khi hầu hết các nội dung khác sử dụng cách đặt tên viết thường (ngoại trừ True, false, none, Ellipsis và NotIm Hiệned)


Nhưng tại sao không làm cho không gian tên không phải là ngoại lệ CamelCase là tốt? Làm cho chúng viết thường không làm gì để giải quyết ô nhiễm không gian tên.
BadHeuristic

1
Đó là cách PSF muốn nó được. Nếu bạn có phản đối, hãy nêu nó trong phần vấn đề của PEP
Vishnudev

@Vishnudev PSF không muốn ngoại lệ ổ cắm là chữ thường. Chúng là những cổ vật lịch sử còn lại vì nó không phá vỡ mã.
Terry Jan Reedy

Có thể nó đã được nêu trong các bài báo PEP sau năm 3151, nhưng bài báo PEP 3151 cho thấy điều ngược lại, trong khi hầu hết các nội dung khác sử dụng cách đặt tên chữ thường " có nghĩa là nội dung nên có chữ thường. Tôi sẽ xóa nhận xét của tôi nếu bạn cho rằng nó không phù hợp @TerryJanReedy
Vishnudev

@Vishnudev 'các nội dung khác sử dụng cách đặt tên chữ thường' (trong python.org/dev/peps/pep-3151/#possible-objections ) đề cập đến các lớp dựng sẵn như int, float, phức tạp, tuple, set, list, dict, và Vài thứ khác. Tất cả các trường hợp ngoại lệ trong nội dung , được liệt kê tại docs.python.org/3/l Library / exceptions.html # build- in-exceptions , là CamelCase. Các ngoại lệ bổ sung được xác định trong các mô-đun khác nên tuân theo mô hình đó trừ khi có lý do chính đáng khác. Các socket ngày đến khi các ngoại lệ là các chuỗi thay vì các lớp và các thể hiện của lớp. (Xóa sẽ làm cho câu trả lời của tôi bớt nhạy cảm hơn.)
Terry Jan Reedy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.