Преобразование строки в Int с использованием try/ кроме Python
Так что я довольно озадачен тем, как преобразовать строку в int с помощью функции try/ исключением. Кто-нибудь знает простую функцию о том, как это сделать? Я чувствую, что все еще немного смутный на струнах и целых. Я уверен, что целые числа связаны с числами. Струны... не так много.
6 ответов
Важно точно указать, какое исключение вы пытаетесь перехватить при использовании блока try/ исключением.
string = "abcd"
try:
i = int(string)
print i
except ValueError:
#Handle the exception
print 'Please enter an integer'
Try / Excepts являются мощными, потому что если что-то может выйти из строя разными способами, вы можете указать, как программа будет реагировать в каждом случае сбоя.
Вот:
s = "123"
try:
i = int(s)
except ValueError as verr:
pass # do job to handle: s does not contain anything convertible to int
except Exception as ex:
pass # do job to handle: Exception occurred while converting to int
Во-первых, try
/ except
не функции, а заявления.
Чтобы преобразовать строку ( или любой другой тип, который можно преобразовать) в целое число в Python, просто вызовите int()
встроенная функция. int()
будут raise
ValueError
если это не удается, и вы должны поймать это конкретно:
В Python 2. x:
>>> for value in '12345', 67890, 3.14, 42L, 0b010101, 0xFE, 'Not convertible':
... try:
... print '%s as an int is %d' % (str(value), int(value))
... except ValueError as ex:
... print '"%s" cannot be converted to an int: %s' % (value, ex)
...
12345 as an int is 12345
67890 as an int is 67890
3.14 as an int is 3
42 as an int is 42
21 as an int is 21
254 as an int is 254
"Not convertible" cannot be converted to an int: invalid literal for int() with base 10: 'Not convertible'
В Python 3. x
синтаксис немного изменился:
>>> for value in '12345', 67890, 3.14, 42, 0b010101, 0xFE, 'Not convertible':
... try:
... print('%s as an int is %d' % (str(value), int(value)))
... except ValueError as ex:
... print('"%s" cannot be converted to an int: %s' % (value, ex))
...
12345 as an int is 12345
67890 as an int is 67890
3.14 as an int is 3
42 as an int is 42
21 as an int is 21
254 as an int is 254
"Not convertible" cannot be converted to an int: invalid literal for int() with base 10: 'Not convertible'
К сожалению, официальная документация мало что говорит об исключениях, которые могут возникнуть; однако, когда вы используетеint()
, он может вызвать по существу два исключения:TypeError
, если значение не является числом или строкой (или байтами, или массивом байтов), иValueError
если значение на самом деле не соответствует числу.
Вы должны управлять обоими, примерно так:
try:
int_value = int(value)
except (TypeError, ValueError):
print('Not an integer')
Во многих случаях мы хотим получить от пользователя целочисленное значение. Пользователи могут вводить нецелочисленные значения, о которых следует предупредить и предложить повторить попытку. Следующий фрагмент можно использовать для получения целочисленного значения от пользователя и продолжения подсказки пользователю вставить целое число, пока он не введет действительное.
def get_integer_value():
user_value = input("Enter an integer: ")
try:
return int(user_value)
except ValueError:
print(f"{user_value} is not a valid integer. Please try again.")
return get_integer_value()
if __name__ == "__main__":
print(f"You have inserted: {get_integer_value()}")
Выход:
Enter an integer: asd
asd is not a valid integer. Please try again.
Enter an integer: 32
You have inserted: 32
Ты можешь сделать:
try :
string_integer = int(string)
except ValueError :
print("This string doesn't contain an integer")