Почему int ('. 0') дает ValueError? - PullRequest
0 голосов
/ 20 ноября 2018

Я передаю число с плавающей точкой в ​​формате строки в int('.0')

0.0 является допустимым числом с плавающей запятой, так почему он выдает ошибку?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Из документации int :

Если x не является числом или если задано основание, то x должно быть строкой, байты, или экземпляр bytearray, представляющий целочисленный литерал в radix база. По желанию, литералу может предшествовать + или - (без пробела между) и окружен пробелами.

Так что это дает вам ValueError, потому что строка '.0' не представляет целочисленный литерал.

0 голосов
/ 20 ноября 2018

Вы можете сделать это, если вы удалите кавычки и сделаете их плавающими как:

int(.1)

Но строки не работают, если внутри строки есть число с плавающей запятой, потому что они будут думать, что это число, и будут ломаться, говоря, что '.' не является числовым значением, также причина, по которой вышеприведенный код работает, такова:

>>> .1
0.1
>>> 

И

float(0.1)

Works.

Обратите внимание, что даже реальное число с плавающей точкой в ​​строке не может быть преобразовано в целое число:

>>> int('3.1')
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    int('3.1')
ValueError: invalid literal for int() with base 10: '3.1'
0 голосов
/ 20 ноября 2018

Потому что вы можете набирать бросок по одному шагу за раз.Например, вы можете преобразовать float в int или строку в int.Не строка с плавающей запятой, которая здесь 2 шага.

...