Очевидно, fc_no_rocks
- это строка в вашем случае. Эта ошибка на вас. Лучше, чтобы проверить несколько случаев:
fc_no_rocks
ряд
fc_no_rocks
является строка, указывающая номер
fc_no_rocks
является ни один из выше
Вы убедитесь, что fc_no_rocks
ISN 't None
, но это могло быть ничего. Поэтому сначала лучше проверить более эксклюзивно, а затем пусть ваш случай else
станет уловкой, то есть ни/ничем из вышеперечисленного.
В одном большом беспорядке трехкомпонентной цепи, то это:
fc = round(float(fc_no_rocks)/100.0, 3) if isinstance(fc_no_rocks, str) and unicode(fc_no_rocks.replace('.','',1)).isnumeric() else round(fc_no_rocks/100.0, 3) if isinstance(fc_no_rocks, float) or isinstance(fc_no_rocks, int) else round((1+5*100)/100.0, 3)
Лучше писать в нескольких строках, им, но однострочечники такие интересно писать. Это как положить ведро с водой на дверь, которую ты знаешь, кто-то еще собирается пройти. Это отстойно быть человеком, поддерживающим ваш код ...! (Кстати, убедитесь, что вы покинули свою работу после написания такого рода материалов, чтобы вам не нужно было поддерживать его.)
Во всяком случае, выход:
>>> fc_no_rocks = "2.3"
>>> fc = ...
>>> fc
0.023
>>> fc_no_rocks = "foobar"
>>> fc = ...
>>> fc
5.01
>>> fc_no_rocks = 1.3
>>> fc = ...
>>> fc
0.013
>>> fc_no_rocks = 6340
>>> fc = ...
>>> fc
63.4
Если вы хотите отлаживать прямо в середине этого заявления, у меня есть хорошие новости:
>>> import sys
>>> fc_no_rocks = "foobar"
>>> fc = round(float(fc_no_rocks)/100.0, 3) if sys.stdout.write(str(type(fc_no_rocks))+"\n") or isinstance(fc_no_rocks, str) and unicode(fc_no_rocks.replace('.','',1)).isnumeric() else round(fc_no_rocks/100.0, 3) if isinstance(fc_no_rocks, float) or isinstance(fc_no_rocks, int) else round((1+5*100)/100.0, 3)
<type 'str'>
>>> fc
5.01
Вы можете злоупотребить логическое поведение or
оператора и тот факт, что метод write()
всегда возвращает None
! Ура! Вы также можете написать repr(fc_no_rocks)
, если вы хотите увидеть его представление - полезно для получения как содержимого строки, так и указания, что да, это строка.
Редактировать: Я запускаю Python 2.7.2, поэтому мне пришлось добавить десятичные точки, чтобы разделить их правильно. Woops!
Можете ли вы предоставить автономный пример? –
Вы на 100% уверены, что ошибка исходит из этой строки? – SethMMorton
Что вы подразумеваете под самодостаточным примером; и да. – Dylansq