Python Numpy:Try/except函数内部无法打印消息

Python Numpy:Try/except函数内部无法打印消息,python,numpy,Python,Numpy,我已经编写了一个简单的函数,使用numpy对我的光谱进行基线减法。代码如下所示: import numpy as np def bas_sub(baseline_y, spectrum_y): try: len(baseline_y)==len(spectrum_y) spectrum_new = np.copy(spectrum_y)-baseline_y return spectrum_new except:

我已经编写了一个简单的函数,使用numpy对我的光谱进行基线减法。代码如下所示:

import numpy as np
def bas_sub(baseline_y, spectrum_y):
    try:
        len(baseline_y)==len(spectrum_y)
        spectrum_new =  np.copy(spectrum_y)-baseline_y
        return spectrum_new
    except:
        print 'Baseline and spectrum shoud have the same length.'
其中基线和频谱是两个1D numpy阵列。我希望我的函数做的是一个简单的长度检查,即,如果基线和频谱具有不同的长度,则函数应打印消息:“基线和频谱应具有相同的长度”。该函数适用于长度相等的输入,但无法使用不同长度的输入打印消息。在最后一种情况下,函数输出是非类型对象。我做错了什么?
谢谢

除了块之外,没有任何东西会抛出异常以被该块捕获

异常处理在这里不是正确的模式。您应该只使用if/else语句:

def bas_sub(baseline_y, spectrum_y):
    if len(baseline_y) == len(spectrum_y):
        spectrum_new = np.copy(spectrum_y) - baseline_y
        return spectrum_new
    else:
        print 'Baseline and spectrum shoud have the same length.'

另一种方法是使用断言:

import numpy as np
def bas_sub(baseline_y, spectrum_y):
    assert len(baseline_y)==len(spectrum_y), "Baseline and spectrum shoud have the same length."
    spectrum_new =  np.copy(spectrum_y)-baseline_y
    return spectrum_new

也许您想要类似于
断言len(基线y)==len(频谱y)
?除了
之外,裸
是一个非常糟糕的主意-请参见,例如,请添加足够的代码来演示意外行为(即,我们可以复制并运行的东西)。当我将两个长度不同的1-d数组传递给该函数时,会打印消息(当然不会返回任何消息)。这是一行
spectrum\u new=np.copy(spectrum\u y)-基线y
在长度不同时会引发
ValueError
。使用general except或类似的方式捕获断言似乎不可取:如果要走这条路线,请引发自己的异常并捕获该异常:如果
基线y
spectrum_y
是具有不同长度的一维数组,在
spectrum\u new=np.copy(spectrum\u y)-baseline\u y
行出现
ValueError
异常。(尽管如此,我还是同意你们的模式改变。)谢谢你们,这同样有效,但我仍然得到了一个非类型对象。例如,如果我这样做:a=bas_sub(bas,spec),其中bas和spec的长度与打印的消息不同,但我得到a=None,这不是我想要的。那么,您需要返回其他内容,我假设您没有显示更多代码。在这种情况下,你想发生什么?也许我的问题并不是很清楚。然而,当基线和频谱长度不同时,我希望函数打印消息并退出,也许一个break-steatment可以在您使用的代码中起作用。什么?当前它退出该函数,这与执行
返回None
相同;因此,如果将调用函数的结果分配给变量,则该变量将不分配任何值。但我仍然无法计算出在这种情况下您希望分配什么。还是你想完全停止剧本?谢谢,这就是我想要的!