Как мне использовать try, кроме как для нескольких элементов?

#python #try-except

#python #try-except

Вопрос:

Итак, я пытаюсь установить несколько значений, разделенных другими переменными, которые могут быть равны 0, поэтому я решил использовать try except:

     try:
        p = pacific / float(a)
        m = mountain / float(b)
        c = central / float(c)
        e = eastern / float(d)
    except ZeroDivisionError:
        p = 0
        m = 0
        c = 0
        e = 0

    print(p)
    print(m)
    print(c)
    print(e)
  

Итак, поскольку все b c и d могут быть равны нулю, я хотел создать экземпляр, в котором, если p m c или e в конечном итоге не определены в результате того, что b c или d равны нулю, я хочу установить только одну конкретную неопределенную переменную (p m c или e)до 0. Например, если все p m c разделяются на числа с плавающей запятой, но d равно 0, а e становится неопределенным, я хочу вернуть числовые значения p, m и c, но e равно 0. Как мне этого добиться? Мой приведенный выше код устанавливает p m c и e для всех в 0, если только одна переменная среди p m c или e не определена. Я знаю, что, вероятно, мог бы перебрать это и попробовать, за исключением каждой из 4 переменных, но я ищу способ сократить этот фрагмент кода.

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

1. Обновите свой пример, чтобы включить значения переменных. Были ли они строками?

2. да, это были строки, но в любом случае они являются числами с плавающей запятой при вычислении

3. Да, я заметил это со float() стороны. Странно, что вы не добавляете инициализацию.

Ответ №1:

Вы могли бы написать функцию, чтобы попробовать разделение и вернуть значение по умолчанию.

 def mydiv(a, b):
    try:
        return a/float(b)
    except ZeroDivisionError:
        return 0

p = mydiv(pacific, float(a))
m = mydiv(mountain, float(b))
c = mydiv(central, float(c))
e = mydiv(eastern, float(d))
  

Ответ №2:

Вам нужно будет проверять каждую запись, но вы можете сделать это с минимальным кодом

 p = pacific  / float(a) if float(a)!=0 else 0
m = mountain / float(b) if float(b)!=0 else 0
c = central  / float(c) if float(c)!=0 else 0
e = eastern  / float(d) if float(d)!=0 else 0

print(p)
print(m)
print(c)
print(e)
  

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

1. Я думаю a , что это строка. Я тоже был обманут этим!

Ответ №3:

Возможно, вам лучше использовать массивы numpy, которые обладают хорошими возможностями обработки ошибок и требуют гораздо меньше кода. Деление на ноль приводит к бесконечности, которая легко заменяется нулем.

 import numpy as np
pmce  = np.array([1,2,3,4]) # numerator
abcd = np.array([5,6,0,8]) # denominator

with np.errstate(divide='ignore'):
    pmce_new = pmce/abcd
    pmce_new[np.isinf(pmce_new)] = 0

print(pmce_new)
  

Вывод:

 [0.2    0.33333333     0.     0.5 ]