我正在编写一个程序,能够检测我正在狩猎的任何神奇宝贝的闪亮精灵,但是,每当我运行 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'
我在使用 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):
现在一切都应该正常了。
您也可以在启动时修补它:
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
上的代码更改而中断
您可以尝试以下方法
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.保存文件。
我有同样的问题,这些步骤对我有用。希望有用。