পাইথন সতর্কতাগুলি কীভাবে অক্ষম করবেন


419

আমি এমন কোডের সাথে কাজ করছি যা warningsলাইব্রেরিটি ব্যবহার করে (আমার কাছে এই মুহুর্তে) অকেজো সতর্কতা ছুড়ে দেয় । ডকুমেন্টেশন পড়া (/ স্ক্যান করা) আমি কেবল একক ফাংশনগুলির জন্য সতর্কতা অক্ষম করার একটি উপায় খুঁজে পেয়েছি । তবে আমি কোডের এত কিছু পরিবর্তন করতে চাই না।

এখানে কি কোনও পতাকা রয়েছে python -no-warning foo.py?

আপনি কি সুপারিশ করতেন?


9
@ মার্টিনস্যামসন আমি সাধারণত সম্মত হই তবে সতর্কতাগুলি উপেক্ষা করার জন্য বৈধ মামলা রয়েছে। আমি defusedxml মধ্যে বৈধ xpath সিনট্যাক্স ব্যবহার থেকে এগুলোর বিভিন্ন পাবেন: FutureWarning: This search is broken in 1.3 and earlier, and will be fixed in a future version. If you rely on the current behaviour, change it to [this other thing]। আমি বরং এখনই সতর্কতাগুলিকে উপেক্ষা করব এবং কেবল কোনও ক্ষতিকারক সতর্কতা এড়াতে অযথা কুৎসিত কোডটি লেখার চেয়ে এটি নিঃশব্দে স্থির হওয়ার জন্য অপেক্ষা করব।
পেড্রো

1
নিষ্ক্রিয় নির্দিষ্ট সতর্কবার্তা: stackoverflow.com/questions/9134795/...
user3226167

উত্তর:



576

আপনি কি অজগর ডক্সের দমন সতর্কতা বিভাগটি দেখেছেন ?

যদি আপনি এমন কোড ব্যবহার করেন যা আপনি জানেন এমন একটি সতর্কতা উত্থাপন করবে যেমন একটি অবহেলা ফাংশন, তবে সতর্কতাটি দেখতে না চান, তবে ক্যাচ_ওয়ার্নিং প্রসঙ্গে পরিচালক ব্যবহার করে সতর্কতা দমন করা সম্ভব:

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

আমি এটিকে সমবেদনা জানাই না, তবে আপনি কেবল এটি দিয়ে সমস্ত সতর্কতা দমন করতে পারেন :

import warnings
warnings.filterwarnings("ignore")

উদা:

>>> import warnings
>>> def f():
...  print('before')
...  warnings.warn('you are warned!')
...  print('after')
>>> f()
before
__main__:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after

12
@ ফ্রেমস্টার - হ্যাঁ, আইএমও এটি নির্দিষ্ট সতর্কতা দমন করার সবচেয়ে সহজ উপায়, সতর্কতাগুলি সাধারণভাবে রয়েছে কারণ কিছু ভুল হতে পারে, সুতরাং কমান্ড লাইনের মাধ্যমে সমস্ত সতর্কতা দমন করা সর্বোত্তম বাজি নাও হতে পারে।
মাইক

1
@ ফ্রেমস্টার - আমি অন্য বিকল্পটি উদাহরণের সাথেও তালিকাভুক্ত করেছি ... আমি এটি তেমন পছন্দ করি না (কারণ আমি আগের মন্তব্যে দিয়েছি) তবে কমপক্ষে এখন আপনার কাছে সরঞ্জাম রয়েছে।
মাইক

41
আপনি যদি কেবলমাত্র একটি নির্দিষ্ট বিভাগ থেকে সতর্কতা পেতে আশা করেন তবে আপনি এই categoryযুক্তিটি ব্যবহার করে warnings.filterwarnings("ignore", category=DeprecationWarning)
এটিটি

1
এটি এই ক্ষেত্রে আমার পক্ষে দরকারী কারণ এইচটিএমএল 5 লিবিএল এক্সএমএল সতর্কতাগুলি ছড়িয়ে দেয় যদিও এটি এক্সএমএলকে বিশ্লেষণ করে না। ধন্যবাদ
জামেস্ক্যাম্পবেল

5
এছাড়া জন্য একটি দরকারী প্যারামিটার warnings.filterwarnings ফাংশন: module। এটি আপনাকে নির্দিষ্ট মডিউল থেকে সতর্কতা উপেক্ষা করতে দেয়।
ব্যবহারকারীর নাম

103

আপনি পরিবেশের পরিবর্তনশীলও সংজ্ঞায়িত করতে পারেন (2010-এ নতুন বৈশিষ্ট্য - অর্থাত পাইথন ২.7)

export PYTHONWARNINGS="ignore"

এটির মতো পরীক্ষা করুন: ডিফল্ট

$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>

সতর্কতা উপেক্ষা করুন

$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>> 

জন্য থামিয়ে দেওয়া সতর্কবার্তা কটাক্ষপাত আছে কিভাবে টু উপেক্ষা-থামিয়ে দেওয়া-সতর্কবার্তা-ইন-পাইথন

এখানে অনুলিপি করা হয়েছে ...

warningsমডিউলটির ডকুমেন্টেশন থেকে :

 #!/usr/bin/env python -W ignore::DeprecationWarning

আপনি যদি উইন্ডোজে থাকেন: -W ignore::DeprecationWarningপাইথনের পক্ষে যুক্তি হিসাবে পাস করুন । বেটার যদিও এ কাস্ট দ্বারা ইস্যু, সমাধান করতে int- এ

(দ্রষ্টব্য যে পাইথন ৩.২-তে, অবজ্ঞা সতর্কতাগুলি ডিফল্টরূপে এড়ানো হবে))

বা:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    import md5, sha

yourcode()

এখন আপনি অন্যান্য DeprecationWarningসমস্তগুলি পান তবে এটির কারণে নয়:

import md5, sha

2
পরীক্ষাগুলি সম্পাদন করার সময় সতর্কতাগুলি উপেক্ষা করার জন্য এটি বিশেষত কার্যকর। ব্যবহার toxযোগ PYTHONWARNINGS=ignoreকরার setenvতোলে আউটপুট কম মলিন।
কুর্ট বাউরবাাকি

2
এডাব্লুএস সিএলআইয়ের জন্যও খুব দরকারী।
mckenzm

1
কিন্তু এটি হ্রাসের সতর্কতাটিকে উপেক্ষা করে না। আমি জিজ্ঞাসা করতে পারি যে এটি কীভাবে অন্তর্ভুক্ত করা যায়?
ওয়ে শি শি

@Wey শি, কটাক্ষপাত করা stackoverflow.com/questions/879173/...
হোলগার Bille থেকে

70

এটি একটি পুরানো প্রশ্ন তবে পিইপি 565 তে কিছু নতুন নির্দেশিকা রয়েছে যা আপনি যদি অজগর অ্যাপ্লিকেশনটি ব্যবহার করেন তবে সমস্ত সতর্কতা বন্ধ করে দিতে হবে:

import sys
import warnings

if not sys.warnoptions:
    warnings.simplefilter("ignore")

এটির সুপারিশ করার কারণটি হ'ল এটি ডিফল্টরূপে সমস্ত সতর্কতাগুলি বন্ধ করে দেয় python -Wতবে কমান্ড লাইনের মাধ্যমে বা এর মাধ্যমে সেগুলি আবার চালু করা যায় PYTHONWARNINGS


এটি নিখুঁত যেহেতু এটি পরবর্তী মৃত্যুদন্ড কার্যকর করার ক্ষেত্রে সমস্ত সতর্কতা অক্ষম করবে না
ওরিসিরিস দে জং


17

আপনার যদি জানা থাকে যে অকেজো সতর্কতাগুলি সাধারণত আপনার মুখোমুখি হয় তবে আপনি সেগুলি বার্তার মাধ্যমে ফিল্টার করতে পারেন।

import warnings

#ignore by message
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")

#part of the message is also okay
warnings.filterwarnings("ignore", message="divide by zero encountered") 
warnings.filterwarnings("ignore", message="invalid value encountered")

0

আমি বুঝতে পেরেছি এটি কেবল পরিস্থিতিগুলির কুলুঙ্গির ক্ষেত্রে প্রযোজ্য, তবে একটি numpyপ্রসঙ্গে আমি সত্যই ব্যবহার করতে চাই np.errstate:

np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan

তবে, ব্যবহার করে np.errstate:

with np.errstate(invalid='ignore'):
    np.sqrt(-1)
nan

সেরা অংশটি হ'ল এটি কেবল কোডের খুব নির্দিষ্ট লাইনগুলিতে প্রয়োগ করতে পারেন।


-5

সতর্কতাগুলি স্টেডারর মাধ্যমে আউটপুট এবং সহজ সমাধান হ'ল সিএলআইতে '2> / dev / নাল' যুক্ত করা। এটি বহু ব্যবহারকারীর কাছে প্রচুর অর্থবহ করে তোলে যেমন সেন্টোস 6 এর সাথে অজগর 2.6 নির্ভরতা (ইয়ামের মতো) এর সাথে আটকে রয়েছে এবং বিভিন্ন মডিউলগুলি তাদের কভারেজে বিলুপ্তির প্রান্তে ঠেলাঠেলি করছে।

এটি বিশেষত এসএনআই এবং সেটির সাথে জড়িত ক্রিপ্টোগ্রাফির জন্য সত্য। এইচটিটিপিএস হ্যান্ডলিংয়ের জন্য প্র্যাকটি ব্যবহার করে একজনের 2.6 আপডেট করতে পারবেন: https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

সতর্কতাটি এখনও রয়েছে, তবে আপনি যা চান তা ব্যাক-পোর্ট করা। স্টাডারের পুনঃনির্দেশ আপনাকে ক্লিন টার্মিনাল / শেল আউটপুট দিয়ে ছেড়ে দেবে যদিও স্টাডাউট সামগ্রী নিজেই বদলে না।

ফ্রেন্ডএফএক্স-তে সাড়া দিচ্ছি। বাক্য এক (1) সর্বজনীন সমাধান দিয়ে সমস্যার সরাসরি প্রতিক্রিয়া জানায়। বাক্য দুটি (২) উদ্ধৃত অ্যাঙ্করটিকে 'অক্ষম সতর্কতা' অ্যাকাউন্টে বিবেচনা করে যা অজগর ২.6 নির্দিষ্ট এবং উল্লেখ করে যে আরএইচইএল / সেন্টোস users ব্যবহারকারীরা ২.6 ছাড়া সরাসরি করতে পারবেন না। যদিও কোনও নির্দিষ্ট সতর্কতা উদ্ধৃত করা হয়নি, প্যারা টু (২) ২.6 প্রশ্নের উত্তর দেয় আমি ক্রিপ্টোগ্রাফি মডিউলটিতে প্রায়শই সংক্ষিপ্ত-কমিকাগুলি পুনরায় পাই এবং কীভাবে একজন পাইথনের এইচটিটিপিএস / টিএলএস কার্য সম্পাদন করতে পারেন (যেমন, আপগ্রেড, ব্যাকপোর্ট, ফিক্স) । প্যারা থ্রি (3) কেবলমাত্র মডিউল / নির্ভরতা পুনঃ-প্রত্যক্ষ ব্যবহার এবং আপগ্রেড করার ফলাফল ব্যাখ্যা করে।


4
উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ। দয়া করে বিষয়গুলিতে কঠোরভাবে উত্তরগুলি রাখুন: আপনি বর্তমানে বেশ কয়েকটি বিষয় উল্লেখ করেছেন যা বর্তমানে দাঁড়িয়ে প্রশ্নটির সাথে সম্পর্কিত নয় যেমন সেন্টোস, পাইথন ২.6, ক্রিপ্টোগ্রাফি, ইউরালিব, ব্যাক-পোর্টিং। এই বিটগুলি অপসারণ করতে আপনি আপনার প্রশ্ন সম্পাদনা করতে পারেন। আপনি যদি ওপি থেকে আরও বিশদ জানতে চান তবে পরিবর্তে প্রশ্নের অধীনে একটি মন্তব্য দিন।
ফ্রেন্ডএফএক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.