0

我有一个简单的循环,它卡在除以零错误上。我正在运行一个 bool 来过滤掉零值分母,但由于某种原因,我使用的 bool 不起作用。有人可以帮忙吗?我正在使用 python 2.6.5

这是我的代码中的一个示例:

for i in range(0,len(lines)):
    line = lines[i]
    line = line.split(";")
    leansz = line[9]
    FW = line[34]
    FS = line[35]  
    print "FS: %s  %s"%(FS,type(FS))  #troubleshooting the denominator and its type
    if FS == "0":  #I have tried FS == 0 and FS == "0" to no avail
        print 'FS == "0"' #checking if bool is working
        continue  #return to top of loop if denominator is zero
    LnSzRa = float(leansz)/(float(FS)/2)  #division by zero error   

这是返回的示例,然后是错误:

FS: 184
  <type 'str'>
FS: 1241
  <type 'str'>
FS: 2763
  <type 'str'>
FS: 1073
  <type 'str'>
FS: 971
  <type 'str'>
FS: 0
  <type 'str'>
Traceback (most recent call last):
  File "mpreader.py", line 50, in <module>
    LnSzRa = float(leansz)/(float(FS)/2)
ZeroDivisionError: float division
4

1 回答 1

2

您的FS值是一个字符串,其中仍然包含文件中的换行符,因此请测试字符串值:

if FS == '0\n':

或剥离换行符:

    如果 FS.strip() == '0':

或者FS先变成一个浮点数:

if float(FS) == 0:

line拆分时剥离:

line = line.strip().split(';')

更多提示:

  • 直接循环就行了lines;不要使用range()

    for line in lines:
        line = line.strip()
        # do something with `line`
    

    即使您仍然需要索引,您可以使用它enumerate()来生成索引:

    for i, line in enumerate(lines):
        line = line.strip()
        # do something with `line` and `i`.
    
  • 您可以使用该csv模块来处理将数据文件拆分为行:

    import csv
    
    with open(somefile, 'rb') as inputfile:
        reader = csv.reader(inputfile, delimiter=';')
        for row in reader:
            leansz, FW, FS = map(float, (row[9], row[34], row[35]))
            if not FS: continue
            LnSzRa = leansz / (FS / 2)
    
于 2013-08-07T20:56:05.030 回答