Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
Python中捕获特定错误消息_Python_Python 3.x_Error Handling_Scipy_Try Except - Fatal编程技术网

Python中捕获特定错误消息

Python中捕获特定错误消息,python,python-3.x,error-handling,scipy,try-except,Python,Python 3.x,Error Handling,Scipy,Try Except,我需要捕获我的一个依赖项何时抛出一个特定的ValueError,并以某种方式处理它,否则重新引发错误。 我没有发现任何最近的问题以符合Python3的方式来处理这个问题,也没有发现处理返回的唯一区别错误是字符串消息的情况 这篇文章可能是最近的: 像这样的东西——不起作用,因为我没有使用一个依赖项,它也提供了HTTP错误可能有的特定代码 以下是我的尝试: 试试看: spect,freq\u bins,time\u bins=spect\u maker.make(syl\u audio, self.

我需要捕获我的一个依赖项何时抛出一个特定的ValueError,并以某种方式处理它,否则重新引发错误。 我没有发现任何最近的问题以符合Python3的方式来处理这个问题,也没有发现处理返回的唯一区别错误是字符串消息的情况

这篇文章可能是最近的:

像这样的东西——不起作用,因为我没有使用一个依赖项,它也提供了HTTP错误可能有的特定代码

以下是我的尝试:

试试看:
spect,freq\u bins,time\u bins=spect\u maker.make(syl\u audio,
self.sampFreq)
除ValueError作为错误外:
如果str(err)=‘窗口比输入信号长’:
warning.warn({1}中带有标签{2}的段{0}'
'不够长,无法使用窗口功能'
'使用当前spect_参数设置。\n'
“spect将设置为nan。”)
spect,频率,时间=(np.nan,
np.nan,
np.nan)
其他:
提升
如果有关系的话,依赖项是scipy,我需要捕捉光谱图因特定原因失败的时间(我获取光谱图的段比窗口函数短)


我意识到我的方法是脆弱的,因为它依赖于错误字符串而不改变,但是错误字符串是唯一区别于同一函数返回的其他ValueErrors的东西。所以我计划做一个单元测试来为自己辩护。

好的,根据其他人的评论,我猜应该是这样的:

# lower-level module
class CustomError(Exception):
    pass

# in method
Class Thing:
    def __init__(prop1):
        self.prop1 = prop1

    def method(self,element):
        try:
            dependency.function(element,self.prop1)
        except ValueError as err:
            if str(err) == 'specific ValueError':
                raise CustomError
            else:
                raise # re-raise ValueError because string not recognized

# back in higher-level module
thing = lowerlevelmodule.Thing(prop1)
for element in list_of_stuff:
    try:
        output = thing.method(element)
    except CustomError:
        output = None
        warnings.warn('set output to None for {} because CustomError'.
                       format(element))

这种方法有什么问题?也许我错过了,但我不确定你在问什么。更好的方法是在较低级别捕获ValueError,引发自定义异常。spect\u maker.make是你的代码的一种方法吗?@Stael我问“这种方法错在哪里”,因为我找不到任何具体的SO问题、随机的博客文章、Python文档中的部分等等,尽管我觉得这是一个常见的问题。也许我没有使用正确的搜索terms@AdrienMatissart是的,spect_maker.make是我代码中的一个方法。我想提出一个自定义异常。在这种情况下,我会在这里捕获自定义异常,对吗?不知道还有什么好处。自定义异常本身仍然是脆弱的,但我想会有关注点分离?也就是说,在当前的方法中,我不会有一个很长的难读的try-catch+if语句列表。理想情况下,如果您可以限制可能引发此特定错误的块,则不需要检查错误字符串。但是我们需要更多关于这个方法的细节。