Buy Me a Coffee☕
*My post explains Warning with warn() in Python.
A warnings filter can set which warnings to show using these filters(actions) below. *"once" may not work properly:
Value | Disposition |
---|---|
"default" | print the first occurrence of matching warnings for each location (module line number) where the warning is issued |
"error" | turn matching warnings into exceptions |
"ignore" | never print matching warnings |
"always" | always print matching warnings |
"module" | print the first occurrence of matching warnings for each module where the warning is issued (regardless of line number) |
"once" | print only the first occurrence of matching warnings, regardless of location |
By default, these filters below are set to warnings.filters and they can be reset with resetwarnings() as shown below:
import warnings print(warnings.filters) # [('default', None,, '__main__', 0), # ('ignore', None, , None, 0), # ('ignore', None, , None, 0), # ('ignore', None, , None, 0), # ('ignore', None, , None, 0)] warnings.resetwarnings() print(warnings.filters) # []
Now, filterwarnings() or simplefilter() can filter warnings as shown below:
*Memos for filterwarnings():
*Memos for simplefilter():
my_project |-main.py |-file1.py(module) └-file2.py(module)
file1.py:
import warnings # Line 1 # Line 2 warnings.warn(message="Warning 1", category=UserWarning) # Line 3 warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 4 warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 5 warnings.warn(message="Warning 3", category=UserWarning) # Line 6
file2.py:
import warnings # Line 1 # Line 2 warnings.warn(message="Warning 1", category=UserWarning) # Line 3 warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 4 warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 5 warnings.warn(message="Warning 3", category=UserWarning) # Line 6
main.py with "default" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="default") warnings.filterwarnings(action="default", message="", category=Warning, module="", lineno=0, append=False) warnings.simplefilter(action="default") warnings.simplefilter(action="default", category=Warning, lineno=0, append=False) print(warnings.filters) # [('default', None,, None, 0)] import file1, file2 # ...\my_project\file1.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning) # ...\my_project\file2.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning)
main.py with "error" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="error") warnings.simplefilter(action="error") print(warnings.filters) # [('error', None,, None, 0)] import file1, file2 # ...\my_project\file1.py", line 3, in # warnings.warn(message="Warning 1", category=UserWarning) # UserWarning: Warning 1
main.py with "ignore" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="ignore") warnings.simplefilter(action="ignore") print(warnings.filters) # [('ignore', None,, None, 0)] import file1, file2 # Warnings are not shown
import warnings warnings.resetwarnings() warnings.filterwarnings(action="ignore", category=UserWarning) warnings.simplefilter(action="ignore", category=UserWarning) print(warnings.filters) # [('ignore', None,, None, 0)] import file1, file2 # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning)
import warnings warnings.resetwarnings() warnings.filterwarnings(action="ignore", message="Warning 1", category=UserWarning) print(warnings.filters) # [('ignore', re.compile('Warning 1', re.IGNORECASE), #, None, 0)] import file1, file2 # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning)
import warnings warnings.resetwarnings() warnings.filterwarnings(action="ignore", lineno=6) warnings.simplefilter(action="ignore", lineno=6) print(warnings.filters) # [('ignore', None,, None, 6)] import file1, file2 # ...\my_project\file1.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning)
main.py with "always" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="always") warnings.simplefilter(action="always") print(warnings.filters) # [('always', None,, None, 0)] import file1, file2 # ...\my_project\file1.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning) # ...\my_project\file2.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:5: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning)
main.py with "module" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="module") warnings.simplefilter(action="module") print(warnings.filters) # [('module', None,, None, 0)] import file1, file2 # ...\my_project\file1.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning) # ...\my_project\file2.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning)
main.py with "once" filter(action):
import warnings warnings.resetwarnings() warnings.filterwarnings(action="once") warnings.simplefilter(action="once") print(warnings.filters) # [('once', None,, None, 0)] import file1, file2 # ...\my_project\file1.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file1.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file1.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning) # ...\my_project\file2.py:3: UserWarning: Warning 1 # warnings.warn(message="Warning 1", category=UserWarning) # ...\my_project\file2.py:4: DeprecationWarning: Warning 2 # warnings.warn(message="Warning 2", category=DeprecationWarning) # ...\my_project\file2.py:6: UserWarning: Warning 3 # warnings.warn(message="Warning 3", category=UserWarning)
main.py with append argument. *If append=False, a filter is add before other filters while if append=True, a filter is add after other filters:
import warnings warnings.resetwarnings() print(warnings.filters) # [] warnings.filterwarnings(action="default", append=False) warnings.simplefilter(action="default", append=False) print(warnings.filters) # [('default', None,, None, 0)] warnings.filterwarnings(action="always", append=False) warnings.simplefilter(action="always", append=False) print(warnings.filters) # [('always', None, , None, 0), # ('default', None, , None, 0)] warnings.filterwarnings(action="once", append=True) warnings.simplefilter(action="once", append=True) print(warnings.filters) # [('always', None, , None, 0), # ('default', None, , None, 0), # ('once', None, , None, 0)]
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3