在Python中使用pygetwindow时如何捕获PyGetWindowException?

2024-09-25 18:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它使用pygetwindow模块在特定窗口上执行一些操作。脚本运行时,出现以下异常:

File "C:\Program Files (x86)\Python38-32\lib\site-packages\pygetwindow\_pygetwindow_win.py", line 237, in activate
    _raiseWithLastError()
  File "C:\Program Files (x86)\Python38-32\lib\site-packages\pygetwindow\_pygetwindow_win.py", line 97, in _raiseWithLastError
    raise PyGetWindowException('Error code from Windows: %s - %s' % (errorCode, _formatMessage(errorCode)))
pygetwindow.PyGetWindowException: Error code from Windows: 0 - The operation completed successfully.

我对异常的发生没有意见,但是我想明确地捕捉这个异常。我已执行以下操作以尝试捕获此异常:

try:
  #implementation
except pygetwindow.PyGetWindowException:
  #handle exception

try:
  #implementation
except PyGetWindowException:
  #handle exception

以上两种方法都不能捕捉到例外。如果我使用上述任一项,我会得到另一个例外:

NameError: name 'PyGetWindowException' is not defined

NameError: name 'pygetwindow' is not defined

我不想捕获一般的Exception然后处理它,因为在其他异常的情况下,我希望以不同的方式处理它。我试图捕获此异常的方式是否有问题,或者是否有方法完全避免此异常

编辑:非常清楚,我已经导入了pygetwindow


Tags: inpy脚本libpackageslinesitefiles
2条回答

更新

source文件可以清楚地看出,为了使用PyGetWindowException,您需要专门导入异常(而不仅仅是import pygetwindow)。因此,为了捕获异常,必须执行以下操作:

from pygetwindow import PyGetWindowException

导入后,您可以按正常方式使用异常:

try:
  #implementation
except PyGetWindowException:
  #handle exception

更新2

另一种通用的方法是从通用异常中get the exception name并进行比较

try:
    try:
        #implementation
    except Exception as e:
        if e.__class__.__name__ == 'PyGetWindowException':
             #handle exception
        else:
             raise e

except Exception as e:
    #handle other exceptions except pygetwindow exception

原始答案(不推荐)

在这个answer中找到了解决这个问题的方法

从{}的{a1}可以清楚地看出,每当提出{}时,都会伴随着以下文本:

"Error code from Windows:"

它指示Windows提供的错误代码

根据这些信息,我做了以下工作:

try:
    try:
        #Implementation
    except Exception as e:
        if "Error code from Windows" in str(e)
            # Handle pygetwindow exception
        else:
            raise e
except Exception as e:
    #handle other exceptions

这是解决问题的另一种方法(尽管第一种和第二种方法是正确和直接的解决方案)

你应该有import pygetwindow在你的脚本乞求。它抱怨不知道什么是pygetwindow

相关问题 更多 >