পাইথনে আমি কীভাবে দাবিগুলি অক্ষম করব?
এটি হ'ল, যদি কোনও দৃ f়তা ব্যর্থ হয় তবে আমি চাই না যে এটি একটি নিক্ষেপ করবে AssertionError
, তবে চালিয়ে যাওয়া।
আমি কেমন করে ঐটি করি?
উত্তর:
পাইথনে আমি কীভাবে দাবিগুলি অক্ষম করব?
একাধিক পদ্ধতি রয়েছে যা একটি একক প্রক্রিয়া, পরিবেশ বা কোডের একক লাইনকে প্রভাবিত করে।
আমি প্রতিটি প্রদর্শন।
-O
পতাকা ব্যবহার করে (মূলধন ও) কোনও প্রক্রিয়াতে সমস্ত দৃ as় বিবৃতি অক্ষম করে।
উদাহরণ স্বরূপ:
$ python -Oc "assert False"
$ python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
নোট করুন যে অক্ষম করে বলতে চাইলে এটি এর দ্বারা প্রকাশিত অভিব্যক্তিটি কার্যকর করে না:
$ python -Oc "assert 1/0"
$ python -c "assert 1/0"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
আপনি এই পতাকাটি সেট করতে আপনি পরিবেশের পরিবর্তনশীল ব্যবহার করতে পারেন।
এটি পরিবেশকে উত্তরাধিকার সূত্রে প্রাপ্ত প্রতিটি প্রক্রিয়াগুলিকে প্রভাবিত করবে process
উদাহরণস্বরূপ, উইন্ডোজে, পরিবেশ পরিবর্তনশীল নির্ধারণ এবং তারপরে সাফ করুন:
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
C:\>SET PYTHONOPTIMIZE=TRUE
C:\>python -c "assert False"
C:\>SET PYTHONOPTIMIZE=
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
ইউনিক্সে একই ( সম্পর্কিত কার্যকারিতার জন্য সেট এবং আনসেট ব্যবহার করে)
আপনি আপনার প্রশ্ন চালিয়ে যান:
যদি একটি দৃ f়তা ব্যর্থ হয়, আমি এটি একটি AssertionError নিক্ষেপ করতে চাই না, কিন্তু চালিয়ে যেতে চাই।
আপনি যদি কোডটি প্রয়োগ করতে ব্যর্থ হন তবে আপনি নিয়ন্ত্রণের প্রবাহটি দৃ reach়তার সাথে পৌঁছে না তা নিশ্চিত করে ধরতে পারেন, উদাহরণস্বরূপ:
if False:
assert False, "we know this fails, but we don't get here"
বা আপনি দৃ error়তা ত্রুটি ধরতে পারেন:
try:
assert False, "this code runs, fails, and the exception is caught"
except AssertionError as e:
print(repr(e))
যা প্রিন্ট করে:
AssertionError('this code runs, fails, and the exception is caught')
এবং আপনি যে বিন্দুটি পরিচালনা করেছেন তা থেকে আপনি চালিয়ে যাবেন AssertionError
।
থেকে ডকুমেন্টেশন :assert
এর মতো একটি দৃsert় বক্তব্য:
assert expression #, optional_message
এর সমতুল্য
if __debug__:
if not expression: raise AssertionError #(optional_message)
এবং,
বিল্ট-ইন পরিবর্তনশীল
__debug__
হয়True
স্বাভাবিক পরিস্থিতিতে,False
যখন অপ্টিমাইজেশান অনুরোধ করা হয় (কমান্ড লাইন বিকল্প-O
)।
এবং আরও
অ্যাসাইনমেন্ট
__debug__
অবৈধ। অন্তর্নির্মিত ভেরিয়েবলের জন্য মান নির্ধারণ করা হয় যখন দোভাষী শুরু হয়।
ব্যবহার নথি থেকে:
বেসিক অনুকূলকরণ চালু করুন। এটি .pyc থেকে .pyo এ সংকলিত (বাইটকোড) ফাইলগুলির জন্য ফাইলের নাম এক্সটেনশন পরিবর্তন করে। পাইথনপটিমিমিজও দেখুন।
এবং
যদি এটি একটি খালি খালি স্ট্রিংয়ে সেট করা থাকে তবে এটি
-O
বিকল্পটি নির্দিষ্ট করার সমান । যদি কোনও পূর্ণসংখ্যকে সেট করা থাকে তবে এটি-O
একাধিকবার নির্দিষ্ট করার সমান ।
if False: assert False
) অথবা আপনি দৃser়তা ত্রুটিটি ধরতে পারেন। সেগুলি আপনার পছন্দ। আপনার প্রশ্নের সমাধানের উত্তর আপডেট করেছেন।
foo()
এবং সুইচিং গবেষকেরা বন্ধ: with skip_assertion(): foo()
। এর সুবিধাটি হ'ল আমাকে ফাংশনে আরও একটি পতাকা যুক্ত করতে হবে না
Assert
বস্তুর সাথে Pass
বস্তুর প্রতিস্থাপন )। একটি প্রসঙ্গে পরিচালক সরাসরি এটির জন্য কাজ করবেন না, তবে আপনার কাছে এমন কোনও প্রক্রিয়া থাকতে পারে যা সজ্জিত ফাংশনগুলি সেভাবে ব্যবহার করে। নির্বিশেষে, আমি এটি সুপারিশ করি না। আমি সন্দেহ করি যে এটি করার জন্য আপনার কারণটি হচ্ছে আপনি কোডটি কল করছেন যা আপনি নিয়ন্ত্রণ করেন না এবং AssertionErferences পেয়ে যাচ্ছেন। যদি তা হয় তবে আপনার সম্ভবত অন্য একটি ঠিক করার প্রয়োজন রয়েছে।
-ও পতাকা সহ পাইথনকে কল করুন:
পরীক্ষা.পি:
assert(False)
print 'Done'
আউটপুট:
C:\temp\py>C:\Python26\python.exe test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
assert(False)
AssertionError
C:\temp\py>C:\Python26\python.exe -O test.py
Done
দুটি উত্তর ইতিমধ্যে দেওয়া দুটি বৈধ (হয় সঙ্গে পাইথন কল -O
বা -OO
কমান্ড লাইন তে) খুলুন।
এখানে তাদের মধ্যে পার্থক্য:
-O
বেসিক অনুকূলকরণ চালু করুন। এটি .pyc থেকে .pyo এ সংকলিত (বাইটকোড) ফাইলগুলির জন্য ফাইলের নাম এক্সটেনশন পরিবর্তন করে।
-OO
বাতিল করুন docstrings ছাড়াও করার -O
অপ্টিমাইজেশন।
ব্যবহার python -O
:
$ python -O
>>> assert False
>>>
আপনার (সর্বাধিক) প্রতিবেদন অক্ষম করা উচিত নয় । মনোযোগ অন্য কোথাও এলে তারা অপ্রত্যাশিত ত্রুটিগুলি ধরা দেয়। "দশের শক্তি" এর বিধি 5 দেখুন ।
পরিবর্তে, কিছু ব্যয়বহুল দৃser়তা চেকগুলি এমন কিছু দ্বারা রক্ষা করুন:
import logging
logger = logging.getLogger(__name__)
if logger.getEffectiveLevel() < logging.DEBUG:
ok = check_expensive_property()
assert ok, 'Run !'
গুরুত্বপূর্ণ বক্তব্য রাখার একটি উপায় এবং assert
বিবৃতিগুলি অপ্টিমাইজ করা যায় না বাছাই বিবৃতিতে তাদের উত্থাপন করা:
if foo_is_broken():
raise AssertionError('Foo is broken!')
__debug__
মিথ্যাতে সেট করার চেষ্টা করেছি তবে এটি অনুমোদিত নয়।