পাইথন পিডিবি - লুপ এড়িয়ে যান


88

আমি কীভাবে একটি লুপ ব্যবহার করে এড়িয়ে যেতে পারি pdb.set_trace()?

উদাহরণ স্বরূপ,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbলুপ আগে জিজ্ঞাসা করা। আমি একটি কমান্ড ইনপুট করি। সমস্ত 1-5 মানগুলি ফিরিয়ে দেওয়া হয় এবং তারপরে মৃত্যুদন্ড কার্যকর করার pdbআগে আবারও অনুরোধ জানাতে চাই print('Done!')

উত্তর:


137

untilবিবৃতি চেষ্টা করুন ।

লুপের শেষ লাইনে ( nextবা এর সাথে n) যান এবং তারপরে untilবা ব্যবহার করুন unt। এটি আপনাকে লুপের ঠিক পরের লাইনে নিয়ে যাবে।

http://www.doughellmann.com/PyMOTW/pdb/ এর ভাল ব্যাখ্যা রয়েছে


নিবন্ধ থেকে: ব্যবহার করে লুপের শেষ লাইনে যান nএবং তারপরে টাইপ করুন until। কমপক্ষে বর্তমান লাইন অতিক্রম না করা পর্যন্ত এটি যাবে।
sachinruk

তালিকা বোধগম্য সঙ্গে কাজ করে। আপনাকে শেষ লাইনের বিষয়ে চিন্তা করতে হবে না।
শিব

লুপের শেষ লাইনে যাওয়া যদি অসুবিধে হয় তবে আপনি কী করবেন? সেখানে সত্যিই কোন সমতূল্য fআর এর দ্বারা ব্যবহৃত debugফাংশন যেটি "শেষ বর্তমান লুপ বা ফাংশন সঞ্চালনের" ( adv-r.hadley.nz/debugging.html )?
কাসউদ

ব্যবহার until(বা তার সংক্ষিপ্ত রূপ unt), আর্গুমেন্ট ছাড়া সবসময় একটি লাইন নিচে যেতে হবে (যতক্ষণ না আপনি একটি ফিরতি বিবৃতি আঘাত) তোমরাও তেমনি শুধু এটা সময়ের একটি গুচ্ছ পরিবর্তে ব্যবহার করতে পারেন n
বরিস

এটি breakpoint()লুপ ইন মধ্যে সেট সঙ্গে কাজ করে না python 3VB Editor'মাছি হয়ে' ব্রেকপয়েন্ট গ্রহণ করতে পারে, কিন্তু এই সম্ভবত সঙ্গে তা হয় না pdb
টিমো

4

লুপের পরে আপনার একটি ব্রেকপয়েন্ট নির্ধারণ করা উচিত ("ব্রেক মেইন.পিএল" অনুমান করে উপরের লাইনগুলি মেইন.পাই নামে একটি ফাইলে রয়েছে) এবং তারপরে চালিয়ে যান ("সি")।


2

গৃহীত উত্তরের ( https://pymotw.com/3/pdb/ ) উল্লিখিত লিঙ্কটিতে আমি এই বিভাগটি কিছুটা সহায়ক বলে মনে করেছি:

একটি নির্দিষ্ট লাইন পর্যন্ত কার্যকর করার জন্য, কমান্ড না হওয়া পর্যন্ত লাইন নম্বরটি পাস করুন।

এটি কীভাবে পুনরায় কাজ করতে পারে তার উদাহরণ এখানে: লুপগুলি:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

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

এখানে পাইথন ডক্স চালু আছে until। বিটিডব্লিউ আমি pdb++স্ট্যান্ডার্ড ডিবাগারের জন্য ড্রপ-ইন হিসাবে ব্যবহার করছি (সুতরাং বিন্যাসটি) তবে untilউভয় ক্ষেত্রে একই কাজ করে works


0

আপনি লুপের পরে আরেকটি ব্রেকপয়েন্টটি সেট করতে পারেন এবং এতে লাফিয়ে (ডিবাগ করার সময়) c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

আমি যদি এটি সঠিকভাবে বুঝতে পারি

এটি করার একটি সম্ভাব্য উপায় হ'ল:

একবার আপনি pdbপ্রম্পট পেতে । শুধু আঘাতnলুপটি থেকে বেরিয়ে আসার জন্য 10 বার (পরবর্তী) ।

তবে আমি লুপ ইন থেকে বেরিয়ে আসার উপায় সম্পর্কে অবগত নই pdb

আপনি rযদিও কোনও ফাংশন থেকে প্রস্থান করতে ব্যবহার করতে পারেন ।


4
এবং লুপটি যদি 10000000 হয়? আপনার উত্তর খুব সুস্পষ্ট।
হ্যাকভিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.