Ошибка ZeroDivisionError: ошибка деления с плавающей запятой в python

#python #python-2.7 #xbmc

#python #python-2.7 #xbmc

Вопрос:

Я работаю над своим скриптом python для медиа-приложения xbmc, чтобы я мог обновить текстовую метку строкой процентов. Для начала я установил для текста метки значение «0%», но я понятия не имею, как обновить текст метки с помощью «1%», «10%», «20%» и так далее.

Когда я пытаюсь это:

 progressStartTime = datetime.datetime.now()
delta = datetime.datetime.now() - progressStartTime
secondsLeft = int(delta.seconds) / float(percentageComplete) * (100.0 - 
percentageComplete)

if secondsLeft > 30:
  secondsLeft -= secondsLeft % 10
  self.setControlLabel(self.main_loading_time_left, "" % secondsLeft)
  

У меня возникли проблемы с обновлением текста в метке, где я получаю
сообщение об ошибке. Ошибка, которую я получаю: ошибка ZeroDivisionError: деление с плавающей запятой

Ошибка переходит на эту строку:

 secondsLeft = int(delta.seconds) / float(percentageComplete) * (100.0 
- percentageComplete)
  

Не могли бы вы помочь мне, как я могу обновить текст в метке с помощью строки процентов?

Редактировать: вот код обновления:

 percentageComplete = 0

if percentageComplete < 1:
   self.getControl(4202).setLabel("1%")


progressStartTime = datetime.datetime.now()
delta = datetime.datetime.now() - progressStartTime
secondsLeft = int(delta.seconds) * (100.0 - percentageComplete)

if percentageComplete > 1:
   secondsLeft -= secondsLeft % 10
   self.getControl(4202).setLabel(secondsLeft   "%")
   #self.setControlLabel(self.main_loading_time_left, "%" % secondsLeft)
  

Комментарии:

1. Я предполагаю, что percentageComplete начинается с 0.

2. при использовании уже установлено значение 0 percentageComplete = 0 . Есть идеи?

3. Вы делите на 0, потому что percentageComplete равно 0…

4. О, я понимаю, не могли бы вы сказать мне, какие изменения мне нужно будет внести, даже если мне не нужно делить?

Ответ №1:

Вы не можете определить, сколько времени осталось, когда вы находитесь на 0%. Исключите этот случай с помощью регистра if.

Комментарии:

1. можете ли вы сказать мне, как я могу обновить текст в метке, когда у меня есть строка в тексте метки с 1% ?

2. Когда вы не на 0%, это правильно. Что вы подразумеваете под «как я могу обновить»? Можете ли вы показать нам контекст вызова?

3. Когда у меня есть текст «1%» в метке, код должен обновлять новый текст с 1% чего-то вроде 10% , 20% или что бы это ни было. В моем коде текст в метке все еще отображается 1% . Пожалуйста, посмотрите Код обновления в моем первом сообщении.

4. Когда я попробую код, который я использую self.getControl(4202).setLabel(secondsLeft "%") , я получу сообщение об ошибке: TypeError: unsupported operand type(s) for : 'float' and 'str' , есть идеи, как это исправить?

5. str(secondsLeft) должен сделать трюк для этого. Вы зацикливаетесь на этой функции? Потому что прямо сейчас ваши данные будут обновлены только один раз. Кроме того, я не уверен, что это будет правильно обновляться. Знаете ли вы, какое время окончания, предполагая, что у вас есть время начала (т. Е. Знаете ли вы, как долго длится ваш носитель?)