如何抑制python脚本中的特定警告?
我得到了一个我可以完全忽略的特别警告。这个警告可能最终会被修补,我的目标是从我的控制台中删除该警告(为了将其清除,我需要查看的垃圾邮件更少) 具体来说,我正试图在macOS Mojave上的Python3包如何抑制python脚本中的特定警告?,python,python-3.x,macos-mojave,suppress-warnings,Python,Python 3.x,Macos Mojave,Suppress Warnings,我得到了一个我可以完全忽略的特别警告。这个警告可能最终会被修补,我的目标是从我的控制台中删除该警告(为了将其清除,我需要查看的垃圾邮件更少) 具体来说,我正试图在macOS Mojave上的Python3包PySimpleGUI中使用FolderBrowse()。这会弹出以下消息(在运行时): objc[2542]:类FIFinderSyncExtensionHost在/System/Library/PrivateFrameworks/FinderKit.framework/Versions/A
PySimpleGUI
中使用FolderBrowse()。这会弹出以下消息(在运行时):
objc[2542]:类FIFinderSyncExtensionHost在/System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit(0x7fff9408e3d8)中实现和/System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride(0x1073e4f50)。将使用其中一个。哪一个未定义。
同样,我在这里的意图是忽略上述警告,而不是自己修复它
我见过其他python警告抑制问题,例如
但是,我并不是试图隐藏一组警告(例如:DeprecationWarning
)。相反,我只想隐藏上面显示的一个警告
编辑,我正在使用的代码:
import PySimpleGUI as sg
window_rows = [[sg.InputText(), sg.FolderBrowse()]]
sg.Window('', window_rows).Read()
请参阅的文档中的部分
模块:
如果您使用的代码知道会引发警告,例如不推荐使用的函数,但不想看到警告(即使通过命令行显式配置了警告),则可以使用catch_warnings上下文管理器抑制警告:
导入警告
def fxn():
警告。警告(“已弃用”,弃用警告)
带有警告。捕获警告()
警告。simplefilter(“忽略”)
fxn()
在上下文管理器中,所有警告都将被忽略。这允许您使用已知的不推荐使用的代码,而不必查看警告,同时不抑制其他可能不知道使用了不推荐使用的代码的代码的警告。(……)
这似乎正是您需要的,不是吗?请参阅
模块:
如果您使用的代码知道会引发警告,例如不推荐使用的函数,但不想看到警告(即使通过命令行显式配置了警告),则可以使用catch_warnings上下文管理器抑制警告:
导入警告
def fxn():
警告。警告(“已弃用”,弃用警告)
带有警告。捕获警告()
警告。simplefilter(“忽略”)
fxn()
在上下文管理器中,所有警告都将被忽略。这允许您使用已知的不推荐使用的代码,而不必查看警告,同时不抑制其他可能不知道使用了不推荐使用的代码的代码的警告。(……)
这似乎正是您所需要的,不是吗?我发现类似这样的方法适用于此错误:
copied_stderr = 0
try:
if is_mac:
# Redirect stderr to /dev/null to hide annoying FIFinderSyncExtensionHost warning
copied_stderr = os.dup(2)
devnull = os.open(os.devnull, os.O_WRONLY)
os.dup2(devnull, 2)
os.close(devnull)
result = func(**args)
finally:
if copied_stderr > 0:
os.dup2(copied_stderr, 2)
os.close(copied_stderr)
如果您不止一次遇到这种情况,您可以创建一个执行重定向的contextmanager。我发现类似这样的操作适用于此错误:
copied_stderr = 0
try:
if is_mac:
# Redirect stderr to /dev/null to hide annoying FIFinderSyncExtensionHost warning
copied_stderr = os.dup(2)
devnull = os.open(os.devnull, os.O_WRONLY)
os.dup2(devnull, 2)
os.close(devnull)
result = func(**args)
finally:
if copied_stderr > 0:
os.dup2(copied_stderr, 2)
os.close(copied_stderr)
如果您不止一次遇到这种情况,您可以创建一个contextmanager来执行重定向。这实际上不是python警告,因此不起作用。@ChristopherBarber,谢谢您的评论。你可能是对的,但我自己无法重现这个问题,而且这个问题也不完全清楚(事实上,它几乎没有提到“Python警告”这个术语,还提到了例如DeprecationWarning
)。因此,即使这个答案不能解决OP的问题,对于其他有类似问题的用户来说,它可能仍然很有用,可以通过标题找到这个问题。这实际上不是python警告,所以这不起作用。@Christopher,谢谢你的评论。你可能是对的,但我自己无法重现这个问题,而且这个问题也不完全清楚(事实上,它几乎没有提到“Python警告”这个术语,还提到了例如DeprecationWarning
)。因此,即使这个答案不能解决OP的问题,它也可能对其他有类似问题的用户有用,并且可以通过标题找到这个问题。