Tùy thuộc vào những gì bạn đang làm nó có thể được thêm Pythonic để sử dụng duck typing. Bằng cách đó, những thứ giống như int (như phao, vv) có thể được truyền đi cũng như ints. Trong trường hợp này, bạn có thể thử chuyển đổi từng hạng mục trong tuple một int
, và sau đó bắt bất kỳ trường hợp ngoại lệ phát sinh:
>>> def convert_tuple(t, default=(0, 1, 2)):
... try:
... return tuple(int(x) for x in t)
... except ValueError, TypeError:
... return default
...
Sau đó, bạn có thể sử dụng nó như vậy:
>>> convert_tuple((1.1, 2.2, 3.3))
(1, 2, 3)
>>> convert_tuple((1.1, 2.2, 'f'))
(0, 1, 2)
>>> convert_tuple((1.1, 2.2, 'f'), default=(8, 9, 10))
(8, 9, 10)
Các OP nên cảnh báo rằng điều này có thể dẫn đến hành vi bất ngờ trong Python 2, bởi vì isinstance (10 ** 100, int) == False. Bạn cần phải làm isinstance (n, (int, long)). Nhưng trong Python, cần phải kiểm tra loại của một cái gì đó thường là một dấu hiệu của một lỗi thiết kế để bắt đầu với. – DSM
Ngoài ra, 'type()' trả về '' cho các lớp kiểu cũ. –
Gandaro