Как пропустить "ZeroDivisionError: деление с плавающей запятой на нулевую ошибку" в python - PullRequest
0 голосов
/ 11 июля 2020

У меня есть файл с 10 столбцами, и мне нужно выполнить математическую операцию в сценарии python для обработки текста. Мой сценарий читает

     prop=str(float(XX[4])*float(XX[4])*float(XX[5])*temp/float(XX[7]))

# Здесь XX [i's] представляет столбцы из входного файла. Это дает мне ошибку ниже

ZeroDivisionError: float division by zero

Есть много ответов на SO для аналогичной проблемы. Тот, который может быть лучшим для меня, - это

Я попытался выполнить ответ, указанный в приведенной выше ссылке, как

def percentage(aa[5],aa[7]):
    if aa[5] == 0:
        if aa[7] == 0:
            return float("nan")
        return float("inf")
return prop=str(float(XX[1])*float(XX[4])*float(XX[5])*temp/float(XX[7]))

Но это дает мне другую ошибку

  def percentage(XX[5],XX[7]):
                     ^
SyntaxError: invalid syntax

Мне нужно деление, опора, эфир ноль или пропустить вычисление, которое дает нулевое деление.

Мой текстовый файл выглядит так

   0.05825   50.0000     17.99350445  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00
   0.05825  100.0000     17.99350445  0.13077009E-15  0.00000000E+00 -0.45510999E-18  0.00000000E+00  0.00000000E+00  0.81253965E-17  0.19522854E-26
   0.05825  150.0000     17.99350445  0.10397411E-08 -0.25009980E-02  0.17709387E+08 -0.37150035E+04  0.16657595E+05  0.33209360E-08  0.15522443E-19
   0.05825  200.0000     17.99350445  0.99342154E-06 -0.19166875E-02  0.20263129E+11 -0.29632045E+01  0.14942206E+08  0.24484631E-05  0.14830932E-16
   0.05825  250.0000     17.99350441  0.61349896E-04 -0.15611973E-02  0.14411398E+13 -0.39712767E-01  0.88306350E+09  0.12402531E-03  0.91590137E-15
   0.05825  300.0000     17.99350355  0.95878961E-03 -0.13214168E-02  0.25227492E+14 -0.21995273E-02  0.13338425E+11  0.16533485E-02  0.14313907E-13
   0.05825  350.0000     17.99349695  0.68254373E-02 -0.11478620E-02  0.19720032E+15 -0.27513111E-03  0.92363500E+11  0.10323277E-01  0.10189793E-12
   0.05825  400.0000     17.99346740  0.29726845E-01 -0.10156130E-02  0.92898089E+15 -0.57356824E-04  0.39294761E+12  0.40281504E-01  0.44379632E-12
   0.05825  450.0000     17.99337512  0.93350594E-01 -0.91087341E-03  0.31177821E+16 -0.16818798E-04  0.12085834E+13  0.11525763E+00  0.13936444E-11
   0.05825  500.0000     17.99315111  0.23327201E+00 -0.82544727E-03  0.82449358E+16 -0.62638878E-05  0.29628362E+13  0.26604916E+00  0.34825512E-11
   0.05830   50.0000     17.99350445  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00
   0.05830  100.0000     17.99350445  0.15031604E-15  0.00000000E+00 -0.53364087E-18  0.00000000E+00  0.00000000E+00  0.93211451E-17  0.22440897E-26
   0.05830  150.0000     17.99350445  0.10959274E-08 -0.24964636E-02  0.18666394E+08 -0.35245389E+04  0.17494317E+05  0.34874619E-08  0.16361258E-19

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 11 июля 2020

В основном вы получаете:

try:
    1/0
except ZeroDivisionError:
    print('OOPS')
OOPS

Так почему бы и нет:

try: 
   prop=str(float(XX[1])*float(XX[4])*float(XX[5])*temp/float(XX[7]))
except ZeroDivisionError:
    pass
    # Or prop = 0
    # Or some other action
    

UPDATE . Я не могу воспроизвести синтаксическую ошибку:

try:
    prop=str(float(4)*float(3)*float(2)*5/float(0))
except ZeroDivisionError:
    prop = 0
    # test
prop
0

Дальнейшее ОБНОВЛЕНИЕ

for x in qty:
          aa=x.split()
          if float(aa[1])==temp:
             first=str(float(aa[0])*ry_ev-ef)
             car_cm=str((float(aa[2])-cc_ef)/vol)
             pff=str(float(aa[4])*float(aa[4])*float(aa[5]))
             try:
                ztt=str(float(aa[4])*float(aa[4])*float(aa[5])*temp/float(aa[7]))
             except ZeroDivisionError:
                ztt=0
             finally:
                seeb.write(first  + "\t"  + aa[4]  + "\t"  + car_cm +  "\n")
                elc.write(first + "\t"  + aa[5]  + "\t"  + car_cm +  "\n")
                eth.write(first + "\t"  + aa[7]  + "\t"  + car_cm + "\n")
                pf.write(first  + "\t"  + pff    + "\t"  + car_cm + "\n")
                zt.write(first + "\t" + ztt +  "\n")
                dos.write(first + "\t" + aa[3] + "\n" )
                cc.write(first + "\t"  + car_cm + "\n")
                itr1+=1

Это дает:

Traceback (most recent call last):
  File "all-graphs.py", line 44, in <module>
    zt.write(first + "\t" + ztt +  "\n")
TypeError: can only concatenate str (not "int") to str

Это проблема с приведением типов и вы решаете это с помощью ztt = "0" в исключении или str(ztt) в write ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...