python 如何修复'TypeError:运行pyautogui.locateOnScreen()时,在“str”和“int”的示例之间不支持“< ”?

6l7fqoea  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(593)

我正在写一个程序,它能够检测我正在寻找的任何口袋妖怪的闪亮精灵,然而,每当我运行pyautogui.locateOnScreen()时,我都会引发TypeError:在“str”和“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'
izkcnapc

izkcnapc1#

我在使用pyautogui时遇到了同样的问题。我使用的是Python 3.8,pyautogui的版本是9.5.0。实际上,这是Python框架包中的一个bug。我不知道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'>

它们都是元组,但是这个元组中的元素是strint类型。当然不能相提并论。
因此,您需要单击报告的错误文件。替换此代码:

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

用这个代码:

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

现在一切都正常了。

相关问题