如何修复“类型错误:”<' not supported between instances of 'str' and 'int' when running pyautogui.locateOnScreen()?

问题描述 投票:0回答:3

我正在编写一个程序,能够检测我正在狩猎的任何神奇宝贝的闪亮精灵,但是,每当我运行 pyautogui.locateOnScreen() 时,我都会引发 TypeError: '<' not supported between instances of 'str' and 'int'

import pyautogui as pag
pag.locateOnScreen('beldum.png')

我自己也截图了图像,但是听说使用pyautogui自带的截图功能更好。我尝试这样做,但每当我尝试这样做时,我都会遇到相同类型的错误。

这是我得到的回溯。

Traceback (most recent call last):
  File "/path/to/file", line 3, in <module>
    pag.locateOnScreen('beldum.png')
  File "/path/to/venv/lib/python3.11/site-packages/pyautogui/__init__.py", line 172, in wrapper
    return wrappedFunction(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/venv/lib/python3.11/site-packages/pyautogui/__init__.py", line 210, in locateOnScreen
    return pyscreeze.locateOnScreen(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/venv/lib/python3.11/site-packages/pyscreeze/__init__.py", line 375, in locateOnScreen
    screenshotIm = screenshot(
                   ^^^^^^^^^^^
  File "/path/to/venv/lib/python3.11/site-packages/pyscreeze/__init__.py", line 527, in _screenshot_osx
    if tuple(PIL__version__) < (6, 2, 1):

TypeError: '<' not supported between instances of 'str' and 'int'
python pyautogui
3个回答
19
投票

我在使用 pyautogui 时遇到了同样的问题。我使用的是Python 3.8,pyautogui的版本是9.5.0。实际上,这是Python框架包中的一个错误。我不知道Python 3.11是否也能以同样的方式工作。无论如何,这就是我遇到这个问题并解决它的方式。

我有这个错误报告:

File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyscreeze/__init__.py", line 528, in _screenshot_osx
    if tuple(PIL__version__) < (6, 2, 1):
TypeError: '<' not supported between instances of 'str' and 'int'

然后我单击进入此报告文件并追溯

PIL__version__
的值。它的定义是这样的:
__version__ = "9.5.0"

现在我们找到问题所在了。一个简单的测试程序可以告诉您一切:

__version__ = "9.5.0"
print(tuple(__version__))
print(type(tuple(__version__)))
print((6, 2, 1))
print(type((6,2,1)))

您将得到的输出如下所示:

('9', '.', '5', '.', '0')
<class 'tuple'>
(6, 2, 1)
<class 'tuple'>

它们都是元组,但是这个元组里面的元素是

str
int
类型。当然不能比较。

所以需要点击进入报告的错误文件。替换此代码:

if tuple(PIL__version__) < (6, 2, 1):

使用此代码:

if tuple(map(int, PIL__version__.split("."))) < (6, 2, 1):

现在一切都应该正常了。


7
投票

您也可以在启动时修补它:

import pyscreeze
import PIL

__PIL_TUPLE_VERSION = tuple(int(x) for x in PIL.__version__.split("."))
pyscreeze.PIL__version__ = __PIL_TUPLE_VERSION

<rest of your app>

免责声明这在某些边缘情况下不起作用。并且也可能由于

pyscreeze

上的代码更改而中断

0
投票

您可以尝试以下方法

1.在您的路径__init__.py

中打开一个
"/path/to/venv/lib/python3.11/site-packages/pyscreeze/__init__.py"
。
在 Spyder 或其他设备上。

2.你只需替换第527行中的这段代码即可

if tuple(PIL__version__) < (6, 2, 1):

if tuple([int(x) for x in PIL__version__.split(".")])< (6, 2, 1):

3.保存文件。

我有同样的问题,这些步骤对我有用。希望有用。

© www.soinside.com 2019 - 2024. All rights reserved.