Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 在循环期间发生异常的情况下:如何在传递异常之前返回中间结果? def storeself->列表: 结果=[] 对于self.url中的url: 如果url.U应存储: 存储的\u url=self.func\u可以\u抛出\u错误 如果存储了\u url:result.appendstored\u url 返回结果_Python_List_Exception_Accumulator - Fatal编程技术网

Python 在循环期间发生异常的情况下:如何在传递异常之前返回中间结果? def storeself->列表: 结果=[] 对于self.url中的url: 如果url.U应存储: 存储的\u url=self.func\u可以\u抛出\u错误 如果存储了\u url:result.appendstored\u url 返回结果

Python 在循环期间发生异常的情况下:如何在传递异常之前返回中间结果? def storeself->列表: 结果=[] 对于self.url中的url: 如果url.U应存储: 存储的\u url=self.func\u可以\u抛出\u错误 如果存储了\u url:result.appendstored\u url 返回结果,python,list,exception,accumulator,Python,List,Exception,Accumulator,前言:不是实际的方法名。选择愚蠢的名字来强调 在循环过程中,可能会发生错误。在这种情况下,我希望中间结果由存储返回,并且仍然引发原始异常,以便在不同的位置进行处理 像这样做 尝试: 除例外情况外: 返回结果 提升 不幸的是,这并没有起到作用,因为raise stmt不会被到达,因此返回一个空的列表get 你们有没有关于如何不失去中间结果的建议 提前谢谢-干杯 这不可能像你想象的那样。不能引发异常并返回值 所以我认为你要求的是一个变通的方法。在这里,我看到两种可能性: 沿实际返回值返回标志/异常:

前言:不是实际的方法名。选择愚蠢的名字来强调

在循环过程中,可能会发生错误。在这种情况下,我希望中间结果由存储返回,并且仍然引发原始异常,以便在不同的位置进行处理

像这样做

尝试: 除例外情况外: 返回结果 提升 不幸的是,这并没有起到作用,因为raise stmt不会被到达,因此返回一个空的列表get

你们有没有关于如何不失去中间结果的建议


提前谢谢-干杯

这不可能像你想象的那样。不能引发异常并返回值

所以我认为你要求的是一个变通的方法。在这里,我看到两种可能性:

沿实际返回值返回标志/异常: 返回标志:

except Exception:
    return result, False
哪里的旗帜表明出了问题

返回异常:

except Exception as e:
    return result, e
由于该存储似乎是某个类的方法,因此可以引发异常并通过第二次调用检索中间结果,如下所示:
这不可能像你想象的那样。不能引发异常并返回值

所以我认为你要求的是一个变通的方法。在这里,我看到两种可能性:

沿实际返回值返回标志/异常: 返回标志:

except Exception:
    return result, False
哪里的旗帜表明出了问题

返回异常:

except Exception as e:
    return result, e
由于该存储似乎是某个类的方法,因此可以引发异常并通过第二次调用检索中间结果,如下所示:
鉴于我对Python的知识有限,我能想出的最佳答案是始终返回一个对,其中对的第一部分是结果,对的第二部分是可选的异常值

def storeself->列表: ' TODO:在此处插入文档。 如果在操作过程中发生错误,将显示部分结果列表以及 将返回异常值。 :返回[结果列表,异常]的元组。例外部分可能是无。 ' 结果=[] 对于self.url中的url: 如果url.U应存储: 尝试: 存储的\u url=self.func\u可以\u抛出\u错误 例外情况除外,如e: 返回结果,e 如果存储了\u url:result.appendstored\u url 返回结果,无
也就是说,正如您所提到的,如果您的代码中有多处调用,那么您必须小心地在所有相关位置更改它,并可能更改处理。类型检查可能会有帮助,尽管我对Python的类型提示知之甚少。

鉴于我对Python的了解有限,我能想到的最好答案是始终返回一个对,其中对的第一部分是结果,对的第二部分是可选的异常值

def storeself->列表: ' TODO:在此处插入文档。 如果在操作过程中发生错误,将显示部分结果列表以及 将返回异常值。 :返回[结果列表,异常]的元组。例外部分可能是无。 ' 结果=[] 对于self.url中的url: 如果url.U应存储: 尝试: 存储的\u url=self.func\u可以\u抛出\u错误 例外情况除外,如e: 返回结果,e 如果存储了\u url:result.appendstored\u url 返回结果,无
也就是说,正如您所提到的,如果您的代码中有多处调用,那么您必须小心地在所有相关位置更改它,并可能更改处理。类型检查可能会有帮助,尽管我对Python的类型提示知之甚少。

与此同时,我想使用累加器,它似乎是目前“最快”的修复方法,在调用store的项目中更改最少。 中间结果不是到处都需要的,比如说它是可选的。所以

我想与大家分享:

def storeself,结果_accu=None->列表: 如果结果_accu为无: 结果_accu=[] 对于self.url中的url: 如果url.U应存储: 存储的url=self.funcurl 如果存储了\u url:result\u accu.append存储的\u url 返回结果_累计 仍然返回列表,但与中间结果一起可通过accu列表上的引用访问。 将参数设置为可选可以使项目中的大多数语句保持原样,因为结果并非处处都需要

这家商店有点像 一种命令,在该命令中,对数据完整性所做的大部分工作都已在中完成。目前的结果很好


但你们也让我注意到ordner中还有工作要做来处理中间结果。谢谢@attalos@MelvinWM

与此同时,我想到了使用累加器的想法,这似乎是目前“最快”的修复方法,在调用store的项目中更改最少。 中间结果不是到处都需要的,比如说它是可选的。所以

我想与大家分享:

def storeself,结果_accu=None->列表: 如果结果_accu为无: 结果_accu=[] 对于self.url中的url: 如果url.U应存储: 存储的url=self.funcurl 如果存储了\u url:result\u accu.append存储的\u url 返回结果_累计 仍然返回列表,但与中间结果一起可通过accu列表上的引用访问。 将参数设置为可选可以使项目中的大多数语句保持原样,因为结果并非处处都需要

store是一种命令,在这种命令中,大多数关于数据完整性的工作都是在内部完成的。目前的结果很好


但你们也让我注意到ordner中还有工作要做来处理中间结果。谢谢@attalos@MelvinWM

据我所知,这是不可能的,你不能同时抛出一个异常和返回一个值,从控制流的角度来说,你必须做一个或另一个。你可以做一些事情,比如返回一个带标签的并集——一种情况是异常值,另一种情况是实际值,第三种情况可能既有结果也有异常。或者创建一个也包含result-so-far的自定义异常。在Python中,您可以不使用标记的联合,而是返回一个包含异常和result-至今的元组。尽管该函数的任何调用方都应该注意检查返回值的形式是否正确。我不知道Python reg中的惯用语是什么。Python中最好的方法可能是总是返回一个元组,第一部分总是中间/完整的结果(如果有的话),第二部分总是抛出异常(如果有的话)。这确实要求函数的调用者必须始终小心地检查各种可能性。函数的返回值,比如只返回一个结果,只返回一个异常,同时返回一个结果和一个异常。啊,这让我想起了Go,在那里有result,err=func语句似乎很常见。在这种特殊情况下,我的缺点是需要调整store的每个调用,而且,由于我希望不管怎样都能抛出原始异常,调用语句必须以某种方式确保在处理中间结果之后实际引发任何给定的异常。啊,很高兴能有这次谈话。我感觉还有其他的问题。。。谢谢是的。。。要使用中间结果,我必须将每个.store语句用try-except-anyway包围起来,以便处理它的结果。据我所知,这是不可能的,您不能同时抛出异常和返回值,从控制流的角度看,您必须这样做或那样做。你可以做一些事情,比如返回一个带标签的并集——一种情况是异常值,另一种情况是实际值,第三种情况可能既有结果也有异常。或者创建一个也包含result-so-far的自定义异常。在Python中,您可以不使用标记的联合,而是返回一个包含异常和result-至今的元组。尽管该函数的任何调用方都应该注意检查返回值的形式是否正确。我不知道Python reg中的惯用语是什么。Python中最好的方法可能是总是返回一个元组,第一部分总是中间/完整的结果(如果有的话),第二部分总是抛出异常(如果有的话)。这确实要求函数的调用者必须始终小心地检查各种可能性。函数的返回值,比如只返回一个结果,只返回一个异常,同时返回一个结果和一个异常。啊,这让我想起了Go,在那里有result,err=func语句似乎很常见。在这种特殊情况下,我的缺点是需要调整store的每个调用,而且,由于我希望不管怎样都能抛出原始异常,调用语句必须以某种方式确保在处理中间结果之后实际引发任何给定的异常。啊,很高兴能有这次谈话。我感觉还有其他的问题。。。谢谢是的。。。为了使用中间结果,我必须用try-except-anyway包围每个.store语句,以便处理结果。看起来很合理。关于异常处理,如果返回异常e,您可能需要确保
在提升e时保持堆栈跟踪。看,与此相结合,元组解决方案也将是一个很好的解决方案。看起来很合理。关于异常处理,如果返回异常e,则可能需要确保在引发e时保留堆栈跟踪。看,与此相结合,元组解决方案也将是一个好主意。还没有考虑将结果存储在实例本身中-这是显而易见的!我最终选择了使用这个。更像OO,也不需要大的改变。谢谢,阿塔洛斯!很乐意帮忙:好主意。还没有考虑将结果存储在实例本身中-这是显而易见的!我最终选择了使用这个。更像OO,也不需要大的改变。谢谢,阿塔洛斯!很高兴提供帮助:同时我选择了attalos更多的OO解决方案,见上图。同时我选择了attalos更多的OO解决方案,见上图。