使用PySide / PyQt进行QFileSystemWatcher错误处理 - Python 3.x.

时间:2015-05-04 23:10:40

标签: python qt pyqt pyside qfilesystemwatcher

我的程序利用Qt的QFileSystemWatcher函数监视网络目录(不在本地计算机本身上)进行更改,然后在找到更改时运行脚本。此功能大部分都按要求执行。该程序旨在全天候运行,这引发了一些使用此特定功能的问题。

导致问题的错误如下:

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

我想实现的功能如下:

  1. 围绕QFileSystemWatcher
  2. 的网络可用性构建错误处理
  3. 如果网络不可用且出现错误,请转至Script()
  4. 运行Script()以处理不可用的网络
  5. 鉴于在程序的初始化中建立了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'错误建立错误处理?任何意见都将非常感谢!

1 个答案:

答案 0 :(得分:1)

根据上述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 /系统相关的错误,但是以相同的方式处理它们。该错误记录在.log文件中,通过电子邮件发送给系统管理员,然后重新启动软件。感谢指导我朝正确的方向ekhumoro!