Kivy:错误弱引用对象(在时钟函数中)不再存在
Kivy : Error weakly-referenced object (in a clock function) no longer exists
这是我的错误代码
我觉得这个错误有问题,我在论坛上找了找也没找到。
并且...我的 phone 出现错误 (使用 kivy launcher python 3 并且当我使用 buildozer 构建时)但是不在我的电脑上(ubuntu 18.0.4 和 windows 10)
据我了解,该错误来自删除引用的垃圾收集器,并且代码尝试在垃圾收集器之后访问该引用。但我不确定我是否真的了解垃圾收集器
我试过的:
- make "strong references" 所以 gc 不会删除它:
id: id.__self__
在我的 kv 文件中
- 使 "strong references" 与 :
self.refs = [
self.id.__self__,
self.id.__self__]
-使用ErrorHandler来处理错误,但错误一直出现
我认为是什么导致了错误,但我不知道如何解决它:
我用来向服务器发送请求的时钟,但我不知道为什么(self.requestClient是发送请求的函数):
C = Clock.schedule_interval(self.requestClient, 5)
Important
The callback is weak-referenced: you are responsible for keeping a
reference to your original object/callback. If you don’t keep a
reference, the ClockBase will never execute your callback
错误:
[ERROR ] Exception catched by ExceptionHandler
05-07 11:27:45.694 2788 2823 I python : Traceback (most recent call last):
05-07 11:27:45.694 2788 2823 I python : File path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 747, in mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 479, in _mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/base.py", line 339, in idle
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/clock.py", line 591, in tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/weakmethod.py", line 56, in is_dead
05-07 11:27:45.694 2788 2823 I python : ReferenceError: weakly-referenced object no longer exists
感谢阅读!
我通常会做些什么来保留对例如my_object
是在我的 root
规则的 kv
部分添加 my_object: my_object.__self__
行。
因为你没有提供任何代码,我不能更具体...
官方文档(Kv language Programming Guide)说要在KV代码中添加'strong'引用如id_name: id_name.__self__
,但不清楚哪里需要这样做。更重要的是,它并没有为我解决 ReferenceError: weakly-referenced object no longer exists
错误。
所做的 工作迫使 Buildozer 使用特定版本的 hostpython3
,方法是将其添加到 buildozer.spec 的 requirements
行文件:
python3==3.7.5, hostpython3==3.7.5
请注意:将以上内容添加到 requirements
后,我返回并删除了所有 __self__
引用,但它仍然可以正常工作,所以显然 Kivy KV 语言不再需要这些.
功劳归功于 。
更新 2020-05-19:Kivy 2.0 中的这个错误reportedly has been fixed。
这是我的错误代码 我觉得这个错误有问题,我在论坛上找了找也没找到。
并且...我的 phone 出现错误 (使用 kivy launcher python 3 并且当我使用 buildozer 构建时)但是不在我的电脑上(ubuntu 18.0.4 和 windows 10) 据我了解,该错误来自删除引用的垃圾收集器,并且代码尝试在垃圾收集器之后访问该引用。但我不确定我是否真的了解垃圾收集器
我试过的:
- make "strong references" 所以 gc 不会删除它:
id: id.__self__
在我的 kv 文件中
- 使 "strong references" 与 :
self.refs = [
self.id.__self__,
self.id.__self__]
-使用ErrorHandler来处理错误,但错误一直出现
我认为是什么导致了错误,但我不知道如何解决它:
我用来向服务器发送请求的时钟,但我不知道为什么(self.requestClient是发送请求的函数):
C = Clock.schedule_interval(self.requestClient, 5)
Important
The callback is weak-referenced: you are responsible for keeping a reference to your original object/callback. If you don’t keep a reference, the ClockBase will never execute your callback
错误:
[ERROR ] Exception catched by ExceptionHandler
05-07 11:27:45.694 2788 2823 I python : Traceback (most recent call last):
05-07 11:27:45.694 2788 2823 I python : File path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 747, in mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 479, in _mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/base.py", line 339, in idle
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/clock.py", line 591, in tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/weakmethod.py", line 56, in is_dead
05-07 11:27:45.694 2788 2823 I python : ReferenceError: weakly-referenced object no longer exists
感谢阅读!
我通常会做些什么来保留对例如my_object
是在我的 root
规则的 kv
部分添加 my_object: my_object.__self__
行。
因为你没有提供任何代码,我不能更具体...
官方文档(Kv language Programming Guide)说要在KV代码中添加'strong'引用如id_name: id_name.__self__
,但不清楚哪里需要这样做。更重要的是,它并没有为我解决 ReferenceError: weakly-referenced object no longer exists
错误。
所做的 工作迫使 Buildozer 使用特定版本的 hostpython3
,方法是将其添加到 buildozer.spec 的 requirements
行文件:
python3==3.7.5, hostpython3==3.7.5
请注意:将以上内容添加到 requirements
后,我返回并删除了所有 __self__
引用,但它仍然可以正常工作,所以显然 Kivy KV 语言不再需要这些.
功劳归功于
更新 2020-05-19:Kivy 2.0 中的这个错误reportedly has been fixed。