Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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程序中运行时警告发生的位置(后验)_Python_Logging_Iteration_Warnings_Raiseevent - Fatal编程技术网

获取Python程序中运行时警告发生的位置(后验)

获取Python程序中运行时警告发生的位置(后验),python,logging,iteration,warnings,raiseevent,Python,Logging,Iteration,Warnings,Raiseevent,我有一个大的4D大脑图像数据集。我在图像中的3d for循环中迭代,以在每个体素中运行一些过程(例如,非线性拟合+MCMC)。for循环是并行的。有时,我会收到运行时警告(例如,ComplexWarning:Casting complex value to real会丢弃虚部或RuntimeWarning:true\u divide中遇到无效值)。事实上,产生运行时警告的函数是非常明确的,只是体素在不同的4D图像之间发生变化 大多数时候,这些警告是有意义的,并且位于我不关心的嘈杂体素中。因此,当

我有一个大的4D大脑图像数据集。我在图像中的3d for循环中迭代,以在每个体素中运行一些过程(例如,非线性拟合+MCMC)。for循环是并行的。有时,我会收到运行时警告(例如,
ComplexWarning:Casting complex value to real会丢弃虚部
RuntimeWarning:true\u divide中遇到无效值
)。事实上,产生运行时警告的函数是非常明确的,只是体素在不同的4D图像之间发生变化

大多数时候,这些警告是有意义的,并且位于我不关心的嘈杂体素中。因此,当这些警告发生时(这是我在阅读的所有So问题中发现的),我不想引发错误或异常(即停止执行),我只想激活一个标志,创建一个掩码或将坐标/for循环迭代导出到日志文件(以及引发的警告消息,以了解发生了什么)。通过这种方式,我可以运行所有程序,并检查警告在哪里

最好的方法是什么?是否有任何“通用”方法将其应用于整个代码而不是特定函数

例如,一个可能的伪代码(尽管我猜在每次迭代中执行2个if不是一个关于性能的好主意……):

导入日志
wrn_log=logging.getLogger()
掩码警告=np.类零(数据)
[...]
对于范围(0,尺寸[0])内的x:
对于范围(0,尺寸[1])内的y:
对于范围(0,尺寸[2])内的z:
res1=foo1(数据)
res2=foo2(res1)
res3=foo3(res2)#此函数中会出现一些警告
如果出现运行时警告:
掩码警告=保存警告(x、y、z、掩码警告、警告消息、警告日志)
res4=foo4(res3)
res5=foo5(res4)#此函数中会出现一些警告
如果出现运行时警告:
掩码警告=保存警告(x、y、z、掩码警告、警告消息、警告日志)
def保存警告(x、y、z、警告消息、警告日志):
wrn_log.info(f'In{x},{y},{z}--{wrn_msg})
遮罩警告[x,y,z]=1
返回掩码警告