如何停止重复的错误消息或找出错误消息的来源

时间:2018-11-24 01:58:12

标签: python

我正在使用一些python代码,这很复杂(至少对我而言)。有许多对象,模块和函数可以调用其他函数等。

运行代码时,有时出了点问题。 (有意义的是,它并不总是出错,因为它涉及采样和随机数等。)

当代码出错时,它不会崩溃,但是我会无限次重复输出输出(如果我停了足够长的时间,它可能会停止运行):

Diagonal element of covariance matrix = 0
Diagonal element of covariance matrix = 0
Diagonal element of covariance matrix = 0
.
.

我似乎无法弄清楚在许多导入的模块中哪个正在产生此消息。我什至不知道代码在什么时候发生,因为其他任何输出都会从屏幕上丢失。我不想将所有输出都读入文本文件,因为代码运行很长时间才能成功或失败,而且我猜该文件会很大。

有什么方法可以使我的代码在开始发出此Diagonal element of covariance matrix = 0消息后立即中断。然后,我至少可以弄清楚问题出在哪里。

也欢迎其他任何想法!

1 个答案:

答案 0 :(得分:1)

虽然我不愿意这么说,但是最好的选择可能是使用某种计时器终止函数的执行。例如,您可以在代码中放入类似内容以终止该函数,然后尝试生成新的随机矩阵,或尝试手动修复协方差矩阵。

import time
import signal


def black_box():
    while True:
        print("Diagonal element of covariance matrix = 0")


def signal_handler(signum, frame):
    raise Exception("Timed out!")


signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(5) # Upper bound of execution normal time
try:
    black_box()
except Exception:
    # Handle timeout
    pass

signal.pause()

祝你好运...