else语句不会返回循环

时间:2015-03-22 05:12:37

标签: if-statement python-3.x while-loop

我有一个打开文件的代码,计算中值并将该值写入单独的文件。有些文件可能是空的,所以我编写了以下循环来检查文件是否为空,如果是,请跳过它,递增计数并返回循环。它完成了它找到的第一个空文件的预期,但不是第二个。循环在

之下
t = 15.2
while t>=11.4:
 if os.stat(r'C:\Users\Khary\Documents\bin%.2f.txt'%t ).st_size > 0:  
    print("All good")
    F= r'C:\Users\Documents\bin%.2f.txt'%t 
    print(t)  
    F= np.loadtxt(F,skiprows=0)
    LogMass = F[:,0]
    LogRed =  F[:,1] 
    value = np.median(LogMass)  
    filesave(*find_nearest(LogMass,LogRed))
    t -=0.2
 else:
    t -=0.2 
    print("empty file")  

输出如下

All good
15.2
All good
15.0
All good
14.8
All good
14.600000000000001
All good
14.400000000000002
All good
14.200000000000003
All good
14.000000000000004
All good
13.800000000000004
All good
13.600000000000005
All good
13.400000000000006
empty file
All good
13.000000000000007
Traceback (most recent call last):
  File "C:\Users\Documents\Codes\Calculate Bin Median.py", line 35, in <module>
    LogMass = F[:,0]
IndexError: too many indices

第二个问题是t不知何故从一个小数位到15位,而最后一位似乎在增加什么呢? 感谢您的帮助

修改 错误IndexError: too many indices似乎仅适用于只有一行示例的文件...

12.9982324  0.004321374

如果我添加第二行我不再得到错误可以有人解释为什么这是?感谢

编辑

我尝试了一个小实验,如果数组只有一行,似乎numpy不喜欢提取列。

In [8]: x = np.array([1,3])

In [9]: y=x[:,0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-9-50e27cf81d21> in <module>()
----> 1 y=x[:,0]

IndexError: too many indices

In [10]: y=x[:,0].shape
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-e8108cf30e9a> in <module>()
----> 1 y=x[:,0].shape

IndexError: too many indices

In [11]: 

4 个答案:

答案 0 :(得分:2)

你应该使用try / except块。类似的东西:

t = 15.2
while t >= 11.4:
    F= r'C:\Users\Documents\bin%.2f.txt'%t 
    try:  
        F = np.loadtxt(F,skiprows=0)
        LogMass = F[:,0]
        LogRed =  F[:,1] 
        value = np.median(LogMass)  
        filesave(*find_nearest(LogMass,LogRed))
    except IndexError:
        print("bad file: {}".format(F))
    else:
        print("file worked!")
    finally:
        t -=0.2

有关异常处理的详细信息,请参阅the official tutorial

最后一位数的问题是浮点数的工作原理,它们不能代表base10数字正好。这可以带来有趣的事情:

In [13]: .3 * 3 - .9
Out[13]: -1.1102230246251565e-16

答案 1 :(得分:2)

要处理单行文件案例,请将ndmin参数添加到np.loadtxt(查看其文档):

np.loadtxt('test.npy',ndmin=2)
# array([[ 1.,  2.]])

答案 2 :(得分:1)

在名为ajcr的用户的帮助下,发现问题是ndim=2应该在numpy.loadtxt()中使用,以确保数组总是2具有维度。

答案 3 :(得分:0)

Python使用 缩进 来定义if whilefor块。

您的if else声明似乎与while完全缩进。

我通常使用完整的“标签”键盘键缩进而不是“空格