Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement else语句不返回循环_If Statement_Python 3.x_While Loop - Fatal编程技术网

If statement else语句不返回循环

If statement else语句不返回循环,if-statement,python-3.x,while-loop,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")

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

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
如果我添加了第二行,我不再得到错误,有人能解释为什么会这样吗?谢谢

编辑

我尝试了一个小实验,如果数组只有一行,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]: 
Python使用缩进定义if while和for块

看起来if-else语句与while语句并没有完全缩进

我通常使用一个完整的“tab”键来缩进,而不是“spaces”

Python使用缩进来定义if while和for块

看起来if-else语句与while语句并没有完全缩进


我通常使用完整的“tab”键来缩进,而不是“spaces”

您应该使用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
有关异常处理的更多详细信息,请参阅

最后一个数字的问题是由于浮点数的工作方式,它们不能准确地表示base10数字。这会带来有趣的事情,比如:

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

您应该使用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
有关异常处理的更多详细信息,请参阅

最后一个数字的问题是由于浮点数的工作方式,它们不能准确地表示base10数字。这会带来有趣的事情,比如:

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

在名为ajcr的用户的帮助下,我们发现问题在于,应该在numpy.loadtxt中使用ndim=2,以确保数组始终有2个维度

在名为ajcr的用户的帮助下,发现问题在于,在numpy.loadtxt中应该使用ndim=2,以确保数组始终有2个维度

要处理单行文件的情况,请将ndmin参数添加到np.loadtxt查看其文档:

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

要处理单行文件的情况,请将ndmin参数添加到np.loadtxt查看其文档:

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

你看到的小数位是因为它特别是减法运算14.8-0.2。如果这是一个问题,您可以选择限制小数位数的显示。查看返回的numpy数组上的形状查看x.shape。在您的输入10中,异常发生在shape调用之前。您看到的小数位是因为它特别是减法运算14.8-0.2。如果这是一个问题,您可以选择限制小数位数的显示。查看返回的numpy数组上的形状查看x.shape。在输入10中,异常发生在形状调用之前。强烈建议不要使用制表符。至少在科学python社区中,4-spaces是标准的。您应该使用将转换->4个空格的和编辑器。OP代码只是以混合级别缩进。这可能是由于空格和制表符的混合;强烈建议不要使用标签。至少在科学python社区中,4-spaces是标准的。您应该使用将转换->4个空格的和编辑器。OP代码只是以混合级别缩进。这可能是由于空格和制表符的混合;引发错误的文件是一个零字节的空文件。然后也捕获该异常。您说的是跳过第一个文件还是跳过第一行,但跳过了第一行?我读不懂您的代码,并认为您跳过了头,但您没有跳过头。是否头跳过引发错误的文件错误是一个零字节的空文件。然后也捕获该异常。您是说跳过第一个文件还是说跳过第一行,然后跳过第一行?我没有阅读您的代码,并认为您跳过了头,但您明确没有跳过头。是否头跳过