引发异常后,sys 配置文件函数变为 none

sys profile function becomes none after exception is raised

我目前正在使用通过 sys.setprofile 设置的自定义配置文件功能。该函数的目标是如果我们在主线程中并且超时线程发出了这样做的信号并且我们在正确处理特定异常的项目的特定范围内,则引发异常。

def kill(frame, event, arg):
   whitelist = [
       r'filepath\fileA.py',
       r'filepath\fileB.py'
   ]

   if event == 'call' and frame.f_code.co_filename in whitelist and kill_signal and threading.current_thread() is threading.main_thread():
      raise BackgroundTimeoutError
   return kill

它工作得很好,但是,一旦引发异常,配置文件功能就会取消设置。因此,在 try/except 块内引发异常并调用 sys.getProfile() 它 returns None.

sys.setprofile(kill)
print(sys.getProfile()) <----- this returns the profile function
try:
   function_that_raises_backgroundtimeouterror()
except:
   pass
print(sys.getProfile()) <----- this returns None

为什么配置文件功能被取消,我该如何解决这个问题?有没有办法永久设置该功能或在未设置时重置它?

分析函数用于分析,而不是引发异常。如果配置文件函数引发异常,Python 假定它已损坏并取消设置。

documentation 说:

Error in the profile function will cause itself unset.