QFileSystemWatcher 错误处理 PySide/PyQt - Python 3.x

QFileSystemWatcher error handling with PySide/PyQt - Python 3.x

我的程序利用 Qt 的 QFileSystemWatcher 功能来监视网络目录(不在本地计算机本身)的更改,然后在发现更改时 运行 脚本。此功能在大多数情况下按要求执行。该程序设计为 运行 24/7,这在使用此特定功能时引发了一些问题。

导致问题的错误如下:

QFileSystemWatcher: FindNextChangeNotification failed!! (The specified network name is no longer available.)

我想实现的功能如下:

  1. QFileSystemWatcher
  2. 构建围绕网络可用性的错误处理
  3. 如果网络不可用并引发错误,请转至Script()
  4. 运行 Script() 用于处理不可用网络

鉴于 QFileSystemWatcher 函数是在程序初始化时建立的,我不确定如何进行错误处理。这是我当前代码的基本概要:

class Main(QMain, Ui_Main):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

        self.DirectoryWatcher = QtCore.QFileSystemWatcher([r'U:\NetworkAddress\Directory'])
        self.DirectoryWatcher.directoryChanged.connect(self.GoToThisDirectory)

    def GoToThisDirectory(self):
        print("foo")

有没有办法为 'FindNextChangeNotification' 错误明确建立错误处理?任何输入将不胜感激!

根据 ekhumoro 的上述评论,我已经设法使用 qInstallMsgHandler 和 sys.excepthook 函数解决了这个问题。

import sys
import os
from PySide.QtCore import qInstallMsgHandler

def myCustomHandler(ErrorType, ErrorContext):
    print("Qt error found.")
    print("Error Type: " + str(ErrorType))
    print("Error Context: " + str(ErrorContext))

    #Error logging code
    #Error emailing code

    os.execv(sys.executable, [sys.executable] + sys.argv)

qInstallMsgHandler(myCustomHandler)

def ErrorHandling(ErrorType, ErrorValue, TraceBack):
    print("System error found.")
    print("Error Type: " + str(ErrorType))
    print("Error Value: " + str(ErrorValue))
    print("Traceback: " + str(TraceBack))

    #Error logging code
    #Error emailing code

    os.execv(sys.executable, [sys.executable] + sys.argv)

sys.excepthook = ErrorHandling

#Rest of the script

我的解决方案分别解决了 Qt 和 Python/system-related 错误,但处理方式相同。错误记录在 .log 文件中,通过电子邮件发送给系统管理员,然后重新启动软件。感谢 ekhumoro 指导我正确的方向!