[英]How Can I Suppress Warnings in Python Module CppHeaderParser
我有一個我需要解析的C ++頭文件。 我正在使用CppHeaderParser 。 可悲的是,標頭會生成很多我想禁止的警告。 有問題的標題由其他人維護,因此我不能僅僅解決它並完成它。
CppHeaderParser不包括抑制警告的可配置方式,但由模塊中的變量和函數控制
# Controls warning_print
print_warnings = 1
...
def warning_print(arg):
if print_warnings: print(("[%4d] %s"%(inspect.currentframe().f_back.f_lineno, arg)))
在我的腳本中,我嘗試更改print_warnings
的值:
import CppHeaderParser
CppHeaderParser.print_warnings = 0
cpp_info = CppHeaderParser.CppHeader(my_h_file)
但這沒有效果。 如何在其他模塊中設置變量,以便該模塊中定義的類可以看到它?
就我而言,我可能還想重新定義warning_print
來檢查警告,並僅跳過希望忽略的特定警告。 我遇到了與設置print_warnings
相同的問題。 分配“有效”但沒有效果,好像CppHeaderParser中的代碼沒有查看我設置的值。
注意 :我通過制作臨時文件的頭文件來解決此問題,並糾正了問題,但是我認為這是一個脆弱的解決方案。
更新 :我能夠通過以下方式完全,智能地取消所有警告:
CppHeaderParser.CppHeaderParser.print_warnings = 0
我已經看過源了。 您的方法存在的問題是在CppHeaderParser文件中帶有*的導入:
from .CppHeaderParser import *
因此,您需要更改導入CppHeaderParser類的方式:
from CppHeaderParser import CppHeaderParser
它應該工作。
最后,只需嘗試以下操作:
from CppHeaderParser import CppHeaderParser
CppHeaderParser.print_warnings = 0
cpp_info = CppHeaderParser.CppHeader(my_h_file)
出現這種現象的原因是, from
語句從導入的模塊創建變量的副本,而不是別名 。 我將嘗試通過一個簡單的示例對其進行解釋。 假設我們有一個名為import_test
模塊,其內容如下:
foo = "Init value"
def f():
print(foo)
然后執行以下代碼:
>> from import_test import *
>> f()
Init value
>> foo = "Updated value"
>> f()
Init value
原因是您更改了變量foo
的副本,因此import_test.foo
變量的實際值import_test.foo
。
但是,當我們導入模塊本身時,我們會有不同的行為:
>> import import_test
>> import_test.f()
Init value
>> import_test.foo = "Updated value"
>> import_test.f()
Updated value
因此,對於CppHeaderParser
軟件包,當您import CppHeaderParser
將執行CppHeaderParser.__init__
內部的代碼。 並且python解釋器在CppHeaderParser中創建了warnings_print
變量的副本。 但是要更改print_warning
函數的行為,您必須更改CppHeaderParser.CppHeaderParser.warnings_print
的值。
嘗試猴子修補:
import CppHeaderParser
def my_silent_warning_print(arg):
pass
CppHeaderParser.warning_print = my_silent_warning_print
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.