I have a class in a different module and I want to show a DeprecationWarning
when that class is imported. What will be the right way to do so?
module 1 contains -
class Test:
pass
module 2 contains -
from module1 import Test #this line should show a DeprecationWarning.
The import will execute the class definition, so put the warning there:
class Test:
raise DeprecationWarning('This class is deprecated')
You could use [Python 3.Docs]: warnings - Warning control, which states (emphasis is mine):
Changed in version 3.2: DeprecationWarning is now ignored by default in addition to PendingDeprecationWarning.
so, you'll have to "manually" enable it, otherwise it won't be visible when importing mod00. This way:
mod00.py:
#!/usr/bin/env python
import warnings
warnings.filterwarnings("default", category=DeprecationWarning, module=__name__)
print("Module mod00")
class Dummy:
warnings.warn("Dummy class is deprecated", category=DeprecationWarning, stacklevel=2)
if __name__ == "__main__":
print("Execute module mod00")
mod01.py:
#!/usr/bin/env python
from mod00 import Dummy
if __name__ == "__main__":
print("Execute module mod01")
dummy = Dummy()
print(dummy)
Output:
e:\Work\Dev\StackOverflow\q060486000>sopr.bat *** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages *** [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -m mod00 Module mod00 e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated class Dummy: Execute module mod00 [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" mod00.py Module mod00 mod00.py:9: DeprecationWarning: Dummy class is deprecated class Dummy: Execute module mod00 [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -c "import mod00" Module mod00 e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated class Dummy: [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -m mod01 Module mod00 e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated class Dummy: Execute module mod01 <mod00.Dummy object at 0x000001EBBC685488>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With