Đôi khi một thử nghiệm suy nghĩ có thể hữu ích.
- Hành vi A:
int('1.23')không thành công với một lỗi. Đây là hành vi hiện có.
- Hành vi B:
int('1.23')sản xuất 1không có lỗi. Đây là những gì bạn đang đề xuất.
Với hành vi A, thật đơn giản và nhỏ nhặt để có được hiệu quả của hành vi B: sử dụng int(float('1.23'))thay thế.
Mặt khác, với hành vi B, việc nhận được hậu quả của hành vi A phức tạp hơn đáng kể:
def parse_pure_int(s):
if "." in s:
raise ValueError("invalid literal for integer with base 10: " + s)
return int(s)
(và ngay cả với đoạn mã ở trên, tôi không hoàn toàn tin tưởng rằng không có trường hợp góc nào mà nó xử lý sai.)
Do đó, hành vi A được thể hiện nhiều hơn hành vi B.
Một điều khác cần xem xét: '1.23'là một biểu diễn chuỗi của một giá trị dấu phẩy động. Chuyển đổi '1.23'thành số nguyên về mặt khái niệm bao gồm hai chuyển đổi (chuỗi chuyển thành số nguyên), nhưng int(1.23)và int('1')mỗi chuyển đổi chỉ liên quan đến một chuyển đổi.
Biên tập:
Và thực sự, có những trường hợp góc mà đoạn mã trên không xử lý được: 1e-2và 1E-2cả hai đều là giá trị dấu phẩy động.
type(3)lợi nhuận<type int>. Tuy nhiên, trăn không phàn nàn về điều đófloat("3"). Không phải python đang ngầm chuyển đổi chuỗi thành int và sau đó thành float?