Đi trước và sử dụng isinstance
nếu bạn cần nó. Nó là hơi xấu, vì nó loại trừ các trình tự tùy chỉnh, các vòng lặp và những thứ khác mà bạn thực sự có thể cần. Tuy nhiên, đôi khi bạn cần cư xử khác đi nếu ai đó, chẳng hạn, vượt qua một chuỗi. Sở thích của tôi sẽ là kiểm tra rõ ràng str
hoặc unicode
thích như vậy:
import types
isinstance(var, types.StringTypes)
NB Đừng nhầm lẫn types.StringType
cho types.StringTypes
. Sau này kết hợp str
và unicode
các đối tượng.
Các types
mô-đun được coi bởi nhiều người cho là lỗi thời ủng hộ việc chỉ kiểm tra trực tiếp chống lại kiểu của đối tượng, vì vậy nếu bạn không muốn sử dụng ở trên, bạn có thể lựa chọn kiểm tra một cách rõ ràng chống lại str
và unicode
, như thế này:
isinstance(var, (str, unicode)):
Biên tập:
Vẫn còn tốt hơn là:
isinstance(var, basestring)
Kết thúc chỉnh sửa
Sau một trong hai điều này, bạn có thể quay lại hành xử như thể bạn đang nhận được một chuỗi bình thường, để cho các chuỗi không đưa ra các ngoại lệ thích hợp.
Hãy xem điều "xấu xa" về kiểm tra kiểu không phải là bạn có thể muốn hành xử khác với một loại đối tượng nhất định, mà là bạn hạn chế một cách giả tạo chức năng của bạn khỏi việc làm đúng với các loại đối tượng bất ngờ sẽ làm điều đúng. Nếu bạn có một dự phòng cuối cùng không được kiểm tra loại, bạn loại bỏ hạn chế này. Cần lưu ý rằng kiểm tra kiểu quá nhiều là mùi mã cho biết bạn có thể muốn thực hiện một số phép tái cấu trúc, nhưng điều đó không nhất thiết có nghĩa là bạn nên tránh nó khỏi getgo.