Во время работы над проектом Python мне нужно было выполнить некоторые расчеты с температурой. Значение было сохранено в строке, поэтому я попытался преобразовать его в значение с плавающей запятой, но получил такую ошибку: «ValueError: не удалось преобразовать строку в число с плавающей запятой».
Здесь мы увидим, как исправить эту ошибку, преобразовав строку в число с плавающей запятой в Python.
Позвольте мне сначала объяснить сценарий. Предположим, мне нужно преобразовать эту строку в число с плавающей запятой:
temperature = "36.2 C"
Когда я попытался выполнить преобразование напрямую с помощью метода float(), он выдал такую ошибку:
Traceback(most recent call last): File "c:\Users\Asus\OneDrive\Desktop\Articles\Core_Python\Python split regex\try.py", line 3, in print(float(temperature)) ^^^^^^^^^^^^^^^^^^ ValueError: could not convert string to float: '36.2 C'
Давайте посмотрим, как мы можем исправить эту ошибку.
С помощью метода replace()
Невозможно преобразовать строку в число с плавающей запятой, если она содержит какие-либо буквенные или специальные символы. Строка должна содержать только числа типа «34,32», поэтому вы можете преобразовать строку в число с плавающей запятой без каких-либо ошибок в значении.
Итак, мы будем использовать функцию replace(), встроенный метод Python, который заменяет шаблон из строки, а также использовать этот метод для удаления буквенных или специальных символов из строки.
Затем мы можем преобразовать строку в число с плавающей запятой, используя метод Python float().
Давайте разберем оба примера, в которых мы получаем ошибку, а также приведем пример решения с использованием метода replace().
price_string = "$5.0" print(float(price_string))
price_string = "$5.0" price_string = price_string.replace("$", "") price_float = float(price_string) print(price_float)
В первом коде у нас есть переменная Price_string, которой присвоено $5,0. Затем мы попытались преобразовать его в число с плавающей запятой напрямую, используя float (price_string), но получили ValueError, поскольку не удалось преобразовать строку в любой другой символ, кроме целого числа.
В решении мы используем метод replace() для замены знака «$» пустой строкой, поэтому теперь остается только числовая часть. Если строка содержит только числовую часть, ее можно преобразовать в число с плавающей запятой в Python с помощью метода float().
С использованием блока Try и Except
Мы также можем использовать блок Try и Except для обработки ValueError в Python. Рассмотрим несколько различных сценариев, в которых мы будем использовать цикл for, и вы также узнаете, как преобразовать несколько строковых значений в числа с плавающей запятой в Python.
Давайте посмотрим, как мы можем использовать блок try и кроме для обработки ValueError в Python.
temperatures = ["Celsius", "36.5","Fahrenheit", "78.56"] temperatures_values = [] for i in temperatures: temperatures_values += [float(i)] print(temperatures_values)
temperatures = ["Celsius", "36.5","Fahrenheit", "78.56"] temperatures_values = [] for i in temperatures: try: temperatures_values += [float(i)] except ValueError: pass print(temperatures_values)
В первом коде у нас есть список, содержащий строки, некоторые элементы содержат алфавиты, а некоторые содержат значения с плавающей запятой в виде строки. Итак, нам нужно преобразовать все строки, содержащие только числа, в числа с плавающей запятой в Python.
Во время итерации, когда «i» было «Цельсий», выдавалось ValueError, поэтому мы использовали блок try-Exception для обработки этой ValueError, за исключением ValueError. Если произойдет ValueError, эта ошибка будет проигнорирована, и итерация не прервется.
Используйте срезы и условные операторы
В Python мы также можем использовать условные операторы и нарезку строк, то есть процесс извлечения необходимой части строки.
Давайте посмотрим, как можно исправить ValueError с помощью цикла for, условных операторов и разрезания строк.
price_list = ["34.0$","35.4$","42.5$","65.7$"] print(type(price_list[0])) print("Trying to convert prices to float") print(float(price_list[0]))
price_list = ["34.0$","35.4$","42.5$","65.7$"] print(type(price_list[0])) values = [] for i in price_list: if type(float(i[0:-2])) == float: values.append(float(i[0:-2])) print(values) print(type(values[0]))
В приведенном выше коде у нас есть список цен. Из-за символа «$» мы получаем ValueError при преобразовании строки в число с плавающей запятой.
Итак, мы использовали условие if следующим образом: if type(float(i[0:-2])), поэтому этот оператор проверит, можно ли преобразовать индекс позиции от 0 до индекса -2 в число с плавающей запятой или нет. Если True, то эта часть элемента будет добавлена в список значений и преобразована в float() следующим образом:
значения.append(float(i[0:-2])).