Python 如何在向后兼容的代码中使用GLib.io_add_watch?
在Ubuntu 14.04下运行一些较旧的Python+GTK3代码时,出现了以下弃用警告:Python 如何在向后兼容的代码中使用GLib.io_add_watch?,python,linux,gtk,pygobject,Python,Linux,Gtk,Pygobject,在Ubuntu 14.04下运行一些较旧的Python+GTK3代码时,出现了以下弃用警告: PyGIDeprecationWarning: io_add_watch is deprecated; use GLib.io_add_watch instead /usr/lib/python3/dist-packages/gi/overrides/GLib.py:655: PyGIDeprecationWarning: Calling io_add_watch without priority as
PyGIDeprecationWarning: io_add_watch is deprecated; use GLib.io_add_watch instead
/usr/lib/python3/dist-packages/gi/overrides/GLib.py:655: PyGIDeprecationWarning: Calling io_add_watch without priority as second argument is deprecated
/usr/lib/python3/dist-packages/gi/overrides/GLib.py:666: PyGIDeprecationWarning: Calling io_add_watch with priority keyword argument is deprecated, put it as second positional argument
这来自一行,其中调用了GObject.io\u add\u watch()
从和看来,GLib.io\u add\u watch()
的参数配置文件不同于GObject.io\u add\u watch()
。所以现在我想知道:
我认为函数签名非常相似,除了优先级:您可能应该使用GLib.priority\u DEFAULT。弃用警告意味着正在使用的功能将在PyGObject的下一个主要版本(目前没有计划)中删除。弃用警告仅在PyGObject的开发版本(奇数个次要版本号)中显示,或者在使用-Wd Python命令行选项启用弃用警告时显示 如果您需要与3.7.2之前的PyGObject版本保持兼容性,那么最好继续使用不推荐的版本,该版本应适用于整个3.x系列:
GObject.io_add_watch(theFd, GLib.IO_IN, onReadable, priority=prio)
如果这在PyGObject的某些版本中不起作用,则这是一个API中断,因此是一个错误,请将其记录在此处:
哎呀,这应该是一个答案,等一下……还没有运气。。。在14.04我需要这样称呼它:GLib.io_add_watch(offd、prio、GLib.io_IN、onReadable);但在12.04上,它必须这样命名:GLib.io\u add\u watch(offd,GLib.io\u IN,onReadable,priority=prio)。在任一系统上使用错误的参数配置文件都会导致异常或警告。我真的应该在这里添加一些运行时版本检查来找到正确的调用吗?我不认为运行时版本检查是不合理的,因为您正在处理(不幸的)更改API的问题。@oliver哦,很抱歉误导您:我没有注意到python包装器在这一过程中发生了更改。运行时版本检查还有另一种解决方案:命名您提供的所有参数。那么订单就不重要了。jku,谢谢你的提示!看起来12.04绑定不喜欢命名参数,但是(“TypeError:io_add_watch至少需要3个参数”)——可能是该版本中的一个简单错误。我现在已经切换到版本检查(“if-GObject.pygobject_version<(3,7,2)”),这很难看,但应该可以正常工作。