Если вы попытаетесь преобразовать string
, который не является представлением int
, в int
, вы получите ValueError
.
. Вы можете попытаться преобразовать все элементы вint
, и поймать ValueError
s:
mysent = ['i','am','10','today']
for i in mysent:
try:
print(int(i))
except ValueError:
continue
ВЫХОД:
10
Если вы хотитечтобы напрямую изменить int
внутри mysent
, вы можете использовать:
mysent = ['i','am','10','today']
for n, i in enumerate(mysent):
try:
mysent[n] = int(i)
except ValueError:
continue
print(mysent)
ВЫХОД:
['i', 'am', 10, 'today']
.isdigit () НЕ ТО ЖЕ КАК попробуйте / за исключением !!!!
В комментариях было указаночто .isdigit()
может быть более элегантным и очевидным.Как указано в Дзэн Питона , Должен быть один - и предпочтительно только один - очевидный способ сделать это .
Из официальной документации , .isdigit()
Вернуть true, если все символы в строке являются цифрами и есть хотя бы один символ, в противном случае - false.
Между тем, блок try/except
ловит ValueError
, поднятое путем применения int
к нечисловому string
.
Они могут выглядеть одинаково, но их поведение действительно отличается:
def is_int(n):
try:
int(n)
return True
except ValueError:
return False
ПРИМЕРЫ:
Положительное целое число:
n = "42"
print(is_int(n)) --> True
print(n.isdigit()) --> True
Поплавок:
n = "3.14"
print(is_int(n)) --> False
print(n.isdigit()) --> False
Отрицательное целое число:
n = "-10"
print(is_int(n)) --> True
print(n.isdigit()) --> False
u
hex:
n = "\u00B23455"
print(is_int(n)) --> False
print(n.isdigit()) --> True
Это только некоторые примеры, и, вероятно, вы уже можете сказать, какой из них лучше подходит вашим потребностям.
Открытая дискуссия о том, какой из них следует использовать, изнурительна и бесконечнаВы можете взглянуть на эту пару интересных SO QA: