#python #python-3.x
#питон #python-3.x #python
Вопрос:
Итак, я довольно озадачен тем, как преобразовать строку в int с помощью функции try / except. Кто-нибудь знает простую функцию о том, как это сделать? Я чувствую, что все еще немного не разбираюсь в string и целых числах. Я почти уверен, что целые числа связаны с числами. Струны… Не так уж много.
Ответ №1:
Важно уточнить, какое исключение вы пытаетесь перехватить при использовании блока try / except.
string = "abcd"
try:
string_int = int(string)
print(string_int)
except ValueError:
# Handle the exception
print('Please enter an integer')
Функции Try / Excepts эффективны, потому что, если что-то может выйти из строя несколькими различными способами, вы можете указать, как вы хотите, чтобы программа реагировала в каждом случае сбоя.
Комментарии:
1. 1 за конкретику. Стоит отметить, что
ValueError
Exception
экземпляр будет содержать больше информации, а именно. «недопустимый литерал для int() с основанием 10: ‘abcd'».2. Просто хотел упомянуть… если есть вероятность, что преобразуемая переменная является
None
, тогда вы захотите, чтобы ваш блок except былexcept (TypeError, ValueError):
Ответ №2:
Вот оно:
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
Комментарии:
1. -1 для перехвата почти всех возможных исключений, а не только
ValueError
. Вы должны улавливать только то, с чем вы знаете, как обращаться.2. Получение большего количества, чем вам нужно, является очень плохой практикой. Скорректируйте свой ответ, и я с радостью изменю свой голос.
3. 1 Это всего лишь пример, поэтому показ шаблона для перехвата ValueError, а также других видов исключений очень поучителен. Это очень полезно, например, для анализа аргумента и установки значения по умолчанию, если оно недопустимо или не определено.
4. Так получилось, что я работаю над очень большой базой кода Python, которая выбрасывала кучу исключений влево и вправо. И в какой-то момент не было другого способа справиться с этим, кроме как перехватить все — вы не знаете, какое новое исключение член другой команды, работающий в другой стране, добавил на прошлой неделе на 10 уровней ниже вашего кода. Исходя из c , я бы сказал, что исключения в python используются чрезмерно.
Ответ №3:
Во-первых, 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'
Комментарии:
1. Является
ValueError
единственным ожидаемым исключением? — в документах это не указано: docs.python.org/2/library/functions.html#int2.
int()
также может вызватьTypeError
.
Ответ №4:
Во многих случаях мы хотим получить от пользователя целочисленное значение. Пользователи могут вставлять нецелые значения, о которых следует предупредить, и им следует предложить повторить попытку. Следующий фрагмент можно использовать для получения от пользователя целочисленного значения и продолжения запроса пользователя вставить целое число, пока он не введет допустимое.
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
Ответ №5:
Вы можете сделать :
try :
string_integer = int(string)
except ValueError :
print("This string doesn't contain an integer")
Комментарии:
1. Синтаксис вашего оператора except неверен — он никогда ничего не поймает. Множественные исключения перехватываются с использованием
except (type1, type2):
синтаксиса. И нет смысла комбинировать конкретную ошибку с общим базовым классомException
.
Ответ №6:
К сожалению, в официальной документации мало говорится об исключениях, которые int()
могут возникнуть; однако, когда вы используете int()
, это может вызвать по существу два исключения: TypeError
, если значение не является числом или строкой (или байтами, или bytearray ), и ValueError
если значение на самом деле не соответствует числу.
Вы должны управлять обоими, используя что-то вроде этого:
try:
int_value = int(value)
except (TypeError, ValueError):
print('Not an integer')