জ্যাঙ্গোতে কীভাবে ডিবাগ করবেন, ভাল উপায়? [বন্ধ]


587

সুতরাং, আমি পাইথন এবং পরে জ্যাঙ্গোতে কোড শিখতে শুরু করেছি । প্রথমবার এটি কঠোরভাবে ট্রেসব্যাকগুলি তাকিয়ে ছিল এবং আসলে আমি কী ভুল করেছি এবং সিনট্যাক্স ত্রুটিটি কোথায় তা খুঁজে পেয়েছিল। কিছু সময় এখন কেটে গেছে কিছুটা পথ ধরে, আমার ধারণা আমার জ্যাঙ্গো কোডটি ডিবাগ করার ক্ষেত্রে আমি একটি রুটিন পেয়েছি। এটি আমার কোডিং অভিজ্ঞতার প্রথমদিকে যেমন করা হয়েছিল, আমি বসে বসে ভাবছিলাম যে আমি কীভাবে এটি করছিলাম তা অকার্যকর এবং দ্রুত করা যায়। আমি সাধারণত আমার কোডগুলিতে বাগগুলি সন্ধান করতে এবং সংশোধন করতে পরিচালনা করি তবে আমি আশ্চর্য হই যে এটি আরও দ্রুত করা উচিত কিনা?

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

তবে এ কি উন্নতি করা যায়? আপনার জ্যাঙ্গো কোডটি ডিবাগ করার জন্য কোনও ভাল সরঞ্জাম বা আরও ভাল উপায় আছে?


2
আমি জ্যাঙ্গো-ডিবাগ-টুলবারটি ব্যবহার করতে চাই, এটির খুব হ্যান্ডফুল
দিয়েগো ভিনসিয়াস

1
অথবা পাইথন ডিবাগারে নির্মিত ভিজ্যুয়াল স্টুডিও কোডের বিল্ট ব্যবহার করুন এখানে বর্ণিত
নিক টি

উত্তর:


536

এটি করার অনেকগুলি উপায় রয়েছে তবে সর্বাধিক সোজাসুজিটি হল পাইথন ডিবাগারটি সহজেই ব্যবহার করা । জাজানো ভিউ ফাংশনটিতে কেবল নিম্নলিখিত লাইনটি যুক্ত করুন:

import pdb; pdb.set_trace()

অথবা

breakpoint()  #from Python3.7

আপনি যদি নিজের ব্রাউজারে সেই পৃষ্ঠাটি লোড করার চেষ্টা করেন, ব্রাউজারটি স্তব্ধ হয়ে যাবে এবং আপনি প্রকৃত নির্বাহী কোডে ডিবাগিং চালিয়ে যাওয়ার জন্য একটি প্রম্পট পাবেন।

তবে অন্যান্য বিকল্প রয়েছে (আমি তাদের প্রস্তাব দিচ্ছি না):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

তবে পাইথন ডিবাগার (পিডিবি) সমস্ত ধরণের পাইথন কোডের জন্য অত্যন্ত প্রস্তাবিত। আপনি যদি ইতিমধ্যে পিডিবিতে থাকেন তবে আপনি আইপিডিবিতেও একবার দেখতে চান যা ডিবাগিংয়ের জন্য আইপথন ব্যবহার করে।

পিডিবিতে আরও কিছু কার্যকর এক্সটেনশন

পিডিবি ++ , আনতাশ প্রস্তাবিত।

pudb , দ্বারা প্রস্তাবিত PatDuJour

জ্যাঙ্গোতে পাইথন ডিবাগারটি ব্যবহার করা হচ্ছে , সিফ্যাঙ্গস প্রস্তাবিত।


64
পিডিবি পরামর্শ দেওয়ার জন্য +1 তবে এটি লক্ষণীয় যে আপনার স্থানীয় মেশিনে বিকাশ সার্ভারটি ব্যবহার করার সময় এটি কেবল সত্যই কাজ করে, যেমন কনসোলে প্রম্পট প্রদর্শিত হবে।
ড্যানিয়েল রোজম্যান

12
নীচের আমার উত্তর অনুসারে এছাড়াও জ্যাঙ্গো-পিডিবি দেখুন। আপনাকে manage.py runserver --pdbএবং manage.py test --pdbআদেশ দেয় ।
টম ক্রিস্টি

4
@ ড্যানিয়েল, অজগরটির ইতিমধ্যে চলছে এমন একটি কনসোল থাকার জন্য rconsole দেখুন ।
ফোব

12
ipythonপাশাপাশি পরীক্ষা করে দেখুন । Ipdb, যা ipythonট্যাব সমাপ্তি, রঙিন সিনট্যাক্স এবং আরও অনেক কিছু রয়েছে :-) features
hobes3

3
আমি আপনার উত্তরটি দরকারী খুঁজে পেয়েছি কিন্তু জাজানো আমার ব্রেকপয়েন্টগুলিতে চিরতরে ঝুলছিল, যখন আমি একটি পরীক্ষা ডিবাগ করার চেষ্টা করছিলাম। সুতরাং আমি একটি তথ্যমূলক নিবন্ধটি দেখেছিলাম এবং এটি আমাকে খুঁজে পেতে সাহায্য করেছে: v3.mike.tig.as/blog/2010/09/14/pdb
ড্রিফ্যাচ্যাচার

228

আমি সত্যিই ওয়ার্কজেগের ইন্টারেক্টিভ ডিবাগারটি পছন্দ করি । এটি জাজানোর ডিবাগ পৃষ্ঠার অনুরূপ, আপনি ট্রেসব্যাকের প্রতিটি স্তরে একটি ইন্টারেক্টিভ শেল পাবেন। আপনি যদি জাঙ্গো-এক্সটেনশানগুলি ব্যবহার করেন , আপনি একটি runserver_plusম্যানেজমেন্ট কমান্ড পাবেন যা বিকাশ সার্ভার শুরু করে এবং ব্যতিক্রমগুলির ক্ষেত্রে ওয়ার্কজেগের ডিবাগার দেয়।

অবশ্যই এটি আপনার কেবল স্থানীয়ভাবে চালানো উচিত, কারণ এটি কোনও ব্রাউজারের সাথে সার্ভারের প্রসঙ্গে নির্বিচারে পাইথন কোড চালানোর অধিকার দেয়।


2
ব্রাউজারে প্রদর্শিত ইন্টারেক্টিভ কনসোলে ট্যাব সমাপ্তি ব্যবহার করা সম্ভব? "ট্যাব" সবেমাত্র আমাদের পরবর্তী খোলা কনসোলে নিয়ে যায়, আমি ভাবছিলাম যে কোনও কী সংমিশ্রণ রয়েছে কিনা, তবে আমি এটির সন্ধান করতে পারি না।
অ্যারিল

@ অ্যারিল ওয়ার্কজেগ ডিবাগারটির ট্যাব সমাপ্তি নেই।
হাকেন idাকনা

আপনি যদি এপিআইগুলি ডিবাগিং করেন তবে আপনি জ্যাঙ্গো -রন্ডবগ চেষ্টা করতে পারেন যা ওয়ার্কজেগ ডিবাগারে কিছুটা বাঁক যুক্ত করে।
এলপাউকেতে

এটি কেবলমাত্রpython 3.3
টিমো

166

টেমপ্লেট ট্যাগগুলির জন্য একটু কুইকি:

@register.filter 
def pdb(element):
    import pdb; pdb.set_trace()
    return element

এখন, কোনও টেমপ্লেটের অভ্যন্তরে আপনি {{ template_var|pdb }}একটি পিডিবি সেশন লিখতে পারেন (আপনি স্থানীয় ডেভেল সার্ভার চালিয়ে যাচ্ছেন) যেখানে আপনি elementআপনার হৃদয়ের সামগ্রীটি পরিদর্শন করতে পারেন ।

এটি যখন টেমপ্লেটে আসে তখন আপনার অবজেক্টের কী হয়েছিল তা দেখার একটি দুর্দান্ত উপায়।


1
এটা অসাধারণ. আপনার যদি টেমপ্লেটের সমস্যা হয় তবে আপনি যা করতে পারেন তা হ'ল জিনজা 2 (কফিনের সাহায্যে বোঝা) এ স্যুইচ করা - এটি জাঙ্গো টেম্পলেটগুলির একটি বর্ধিতাংশ, যা আমার মতে উন্নতি। এটি টেম্পলেট এবং টেমপ্লেট উত্তরাধিকারকে জ্যাঙ্গোর চেয়ে ভাল ট্রেসব্যাক ফ্রেমে আরও সংহত করে।
ফাস্টমুথলিপ্লিকেশন

এটি খুবই সুন্দর. দুর্ভাগ্যক্রমে, এটি কোনও কোডবেসে সংহত করার একটি পরিষ্কার উপায় দেখতে পারা শক্ত যা পিডিবির আমদানি সহ কোনও প্রতিশ্রুতি অস্বীকার করে।
জন কিপারস্কি

83

কয়েকটি সরঞ্জাম রয়েছে যা ভালভাবে সহযোগিতা করে এবং আপনার ডিবাগিংয়ের কাজটিকে আরও সহজ করে তুলতে পারে।

জ্যাঙ্গো ডিবাগ টুলবারটি সর্বাধিক গুরুত্বপূর্ণ ।

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

আপনার বিকাশ করা কোনও অ্যাপ্লিকেশনের জাভাস্ক্রিপ্টের দিকটি ডিবাগ করার জন্য নিজেই ফায়ারবাগও সমালোচিত। (ধরে নিচ্ছি আপনার কাছে কিছু জেএস কোড অবশ্যই রয়েছে)।

আমি পিডিবি ব্যবহার করে ইন্টারেক্টিভভাবে ডিবাগিং ভিউয়ের জন্য জ্যাঙ্গো-ভিউটিওলগুলি পছন্দ করেছি তবে আমি এটি এতটা ব্যবহার করি না।

মেমরি ফাঁসগুলি ট্র্যাক করার জন্য ডজারের মতো আরও দরকারী সরঞ্জাম রয়েছে (মেমরি ট্র্যাকিংয়ের জন্য এসও-তে উত্তরগুলিতে এখানে আরও ভাল পরামর্শ দেওয়া হয়েছে)।


65

আমি পাইচার্ম (গ্রহপ হিসাবে একই পাইদেব ইঞ্জিন) ব্যবহার করি। সত্যই আমাকে আমার কোডটি দিয়ে দৃষ্টিভঙ্গি করতে এবং যা ঘটছে তা দেখার জন্য দৃষ্টিভঙ্গি করতে সহায়তা করে।


2
এটি সম্পর্কে সর্বোত্তম জিনিস এটি কেবল কাজ করে এবং সম্পূর্ণ স্বজ্ঞাত। কেবল একটি লাইনের বাম দিকে ক্লিক করুন এবং ডিবাগ বোতামটি টিপুন। এটি অভ্যন্তরীণ কোড কীভাবে কাজ করে সে সম্পর্কে আরও ভাল ধারণা পেতে চাইলে এটি জ্যাঙ্গো উত্স কোডের পক্ষেও ভাল কাজ করে। আমি এটি লক্ষ্য করার আগে আমার কিছুটা সময় লেগেছিল তবে আপনি ফাইল নেভিগেটরের বাইরের লাইব্রেরি ফোল্ডারে যে কোনও কোডে ব্রেকপয়েন্ট রাখতে পারেন put
মাইকেল বাইলস্ট্রা

6
উল্লেখ করার মতো বিষয় যে পাইচার্ম ক্রেডিটগুলির জন্য হুডের অধীনে পাইডেভ ডিবাগারটি ব্যবহার করে।
মেডিইরোস


44

এখন পর্যন্ত প্রায় সমস্ত কিছুই উল্লেখ করা হয়েছে, সুতরাং আমি কেবল যুক্ত করব যে pdb.set_trace()একজনের পরিবর্তে ipdb.set_trace () ব্যবহার করতে পারেন যা আইপথন ব্যবহার করে এবং তাই আরও শক্তিশালী (স্বতঃসিদ্ধ এবং অন্যান্য গুডিজ)। এটির জন্য আইপিডিবি প্যাকেজ দরকার, সুতরাং আপনার কেবল প্রয়োজনpip install ipdb


2
আমি পিডিবি ++ এর প্রস্তাব দিচ্ছি যা একটি খুব দরকারী স্টিকি মোড সরবরাহ করে।
সন্দীপ

34

আমি ধাক্কা থাকেন django-pdbকরার PyPI । এটি একটি সহজ অ্যাপ্লিকেশন যার অর্থ প্রতিবার আপনি পিডিবিতে বিভক্ত করতে চাইলে আপনার উত্স কোডটি সম্পাদনা করার দরকার নেই।

ইনস্টলেশন কেবলমাত্র ...

  1. pip install django-pdb
  2. 'django_pdb'আপনার যোগ করুনINSTALLED_APPS

আপনি এখন চালাতে পারেন: manage.py runserver --pdbপ্রতিটি দর্শনার শুরুতে পিডিবিতে বিভক্ত করতে ...

bash: manage.py runserver --pdb
Validating models...

0 errors found
Django version 1.3, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

GET /
function "myview" in testapp/views.py:6
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(7)myview()
-> a = 1
(Pdb)

এবং চালান: manage.py test --pdbপরীক্ষার ব্যর্থতা / ত্রুটিগুলি পিডিবিতে বিভক্ত করতে ...

bash: manage.py test testapp --pdb
Creating test database for alias 'default'...
E
======================================================================
>>> test_error (testapp.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../django-pdb/testproject/testapp/tests.py", line 16, in test_error
    one_plus_one = four
NameError: global name 'four' is not defined
======================================================================

> /Users/tom/github/django-pdb/testproject/testapp/tests.py(16)test_error()
-> one_plus_one = four
(Pdb)

প্রকল্পটি গিটহাবে হোস্ট করেছে , অবদানগুলি অবশ্যই স্বাগত।


3
এটি দুর্দান্ত হবে যদি আপনি ফাইল / লাইন নম্বরটি ব্রেক করতে (কেবল দেখতে নয়) নির্দিষ্ট করতে পারেন।
আনসন ম্যাক ক্রেচার 16

যা আমি কোডে রেখে যেতে পারি মতামতের মতামত যা উত্পাদনের মধ্যে জড় হয় are সম্ভবত এটি একটি খারাপ প্যারাডিম, তবে কার্যকরভাবে স্ট্র্যাপগুলি উইল-নিলি স্ট্রিপ করা এবং প্রয়োগ করা দুর্দান্ত হবে।
গ্লিসারিন

আমি সম্প্রতি এটি ইনস্টল করেছি, তবে টমসের জাঙ্গো-পিডিবি দ্বারা নথিভুক্ত হিসাবে আমার ডেভ সেটিংসে "POST_MORTEM = সত্য" কনফিগার করার জন্য কেবল আজই আবিষ্কার করেছি। এখন আমি ঠিক পাশাপাশি ক্রুজ করতে পারি এবং যখন জিনিসগুলি খারাপ হয় আমি সমস্যার অবস্থান থেকে ডানদিকে নামিয়ে আছি। ধন্যবাদ টম!
জোসেফ শেডি 20

21

পাইথনটি ডিবাগ করার সহজতম উপায় - বিশেষত ভিজুয়াল স্টুডিওতে ব্যবহৃত প্রোগ্রামারগুলির জন্য - পিটিভিএস (ভিজুয়াল স্টুডিওর জন্য পাইথন সরঞ্জাম) ব্যবহার করা হচ্ছে। পদক্ষেপগুলি সহজ:

  1. এটি http://pytools.codeplex.com/ থেকে ডাউনলোড করুন এবং ইনস্টল করুন
  2. ব্রেকপয়েন্টগুলি সেট করুন এবং F5 টিপুন।
  3. আপনার ব্রেকপয়েন্টটি হিট হয়েছে, আপনি ডিবাগিং সি # / সি ++ প্রোগ্রামের মতো ভেরিয়েবলগুলি দেখতে / পরিবর্তন করতে পারবেন।
  4. এখানেই শেষ :)

আপনি যদি পিটিভিএস ব্যবহার করে জ্যাঙ্গো ডিবাগ করতে চান তবে আপনাকে নিম্নলিখিতগুলি করতে হবে:

  1. প্রোজেক্ট সেটিংসে - সাধারণ ট্যাব, "স্টার্টআপ ফাইল" সেট করে "ম্যানেজ.পি", জ্যাঙ্গো প্রোগ্রামের এন্ট্রি পয়েন্ট।
  2. প্রোজেক্ট সেটিংসে - ডিবাগ ট্যাব, "স্ক্রিপ্ট আর্গুমেন্টস" "রানসারভার --নরলোড" এ সেট করুন। মূল পয়েন্টটি এখানে "--Noreload"। আপনি যদি এটি সেট না করে থাকেন তবে আপনার ব্রেকপয়েন্টগুলি আঘাত হারাবে না।
  3. উপভোগ কর.

1
ধন্যবাদ, এটি দুর্দান্ত কাজ করেছে। --Noreload যা আমাদের প্রয়োজন ছিল
টম গ্রুনার

রিমোট সার্ভারে ডিবাগ করার কোনও বৈশিষ্ট্য রয়েছে - আমি এই মুহুর্তে এক্সপ্লিপ পাইডিভের অনুরূপ?
ড্যানিয়েল সোকলোভস্কি

এ নিয়ে আমার সমস্যা হচ্ছে। আমি আপনার পদক্ষেপগুলি অনুসরণ করেছি কিন্তু এখনও কাজ করে না। এটি কেবল * .py ফাইলগুলির ব্রেকপয়েন্টগুলিতে থামে, * .html ফাইলগুলিতে নয়।
blfuentes

16

আমি পিগ্রিভকে এক্সিলিপ সহ সত্যিই ভাল ব্যবহার করেছি , ব্রেক পয়েন্ট সেট করেছি, কোডে পদক্ষেপ নিয়েছি , যে কোনও অবজেক্ট এবং ভেরিয়েবলের মান দেখেছি , চেষ্টা করে দেখি।


আপনাকে গ্রহনের মাধ্যমে দেব সার্ভারটি চালাতে হবে (স্বল্প-প্রচেষ্টা ডিবাগিং অভিজ্ঞতার জন্য)। পাইডিভ দাবি করে যে রিমোট ডিবাগিং রয়েছে তবে এটি কখনও ব্যবহার না করে আমি সত্যিই উন্নয়নের অভিজ্ঞতার মানের সাথে কথা বলতে পারি না। বিশদ: pydev.org/manual_adv_remote_debugger.html
সিনথেসাইজারপ্যাটেল

2
পাইডেভের রিমোট ডিবাগার জ্যাঙ্গোর ডেভ সার্ভারের সাথে বেশ বিস্ময়করভাবে কাজ করে। কেবলমাত্র আপনার "ফাইলটি পরিবর্তন হয়ে গেলে স্বয়ংক্রিয়ভাবে মডিউল পুনরায় লোড করবেন" তা নিশ্চিত করুন? পাইডেভের রান / ডিবাগ সেটিংসে '' অক্ষম '' বিকল্পটি। অন্যথায় ডেভ সার্ভার এবং পাইদেব উভয়ই আপনি ডিবাগ করার সময় কোডটি পুনরায় লোড করার চেষ্টা করবেন যা তাদের উভয়কেই অত্যন্ত বিভ্রান্ত করে।
coredumperror

12

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

যদিও আমাকে বলতে হবে, পাইচার্ম অনেক স্মৃতি নেয়। তবে আবার, জীবনে ভাল কিছুই নিখরচায় নয়। তারা সবেমাত্র তাদের সর্বশেষতম সংস্করণ 3 নিয়ে এসেছিল D এটি জাঙ্গো, ফ্লাস্ক এবং গুগল অ্যাপইঙ্গিনের সাথে খুব ভাল অভিনয় করে। সুতরাং, সর্বোপরি, আমি বলব যে কোনও বিকাশকারীর জন্য এটি দুর্দান্ত সরঞ্জাম।

আপনি যদি এটি এখনও ব্যবহার না করে থাকেন তবে আমি পাইচার্মের শক্তিটি একবার দেখার জন্য 30 দিনের জন্য ট্রায়াল সংস্করণটি নেওয়ার পরামর্শ দেব। আমি নিশ্চিত যে অন্যান্য সরঞ্জামগুলিও উপলভ্য, যেমন অপ্টানা। তবে আমি অনুমান করি পাইকার্মের চেহারাটি ঠিক আমার পছন্দ। আমি আমার অ্যাপগুলি সেখানে ডিবাগ করতে খুব স্বাচ্ছন্দ্য বোধ করি।


এটি আমার প্রথম আইডিই হতে পারে। কোনও ভিএম-তে একটি প্রকল্প ডিবাগ করা অর্থ প্রদানের মতো যাদু বলে মনে হচ্ছে।
রব গ্রান্ট

10

কখনও কখনও যখন আমি একটি নির্দিষ্ট পদ্ধতিতে কাছাকাছি অন্বেষণ করতে চাই এবং পিডিবি ডেকে আনা খুব জটিল হয়, আমি যুক্ত করব:

import IPython; IPython.embed()

IPython.embed() আইপিথন শেলটি শুরু করে যা আপনি যেখানে ডাকেন সেখান থেকে স্থানীয় ভেরিয়েবলের অ্যাক্সেস রয়েছে।


আমি এখনই একটি অভ্যাস তৈরি করেছি ফাইলটির শীর্ষে এটি করার from IPython import embedএবং তারপরে যখনই আমি কোডটিতে দ্রুত একটি ব্রেকপয়েন্ট যুক্ত করতে চাই, আমি লিখি embed()। সময় সংরক্ষণ. চিরকালের লুপগুলিতে আটকাতে, আমি করিembed();exit();
মায়াঙ্ক জয়সওয়াল

@ মায়াঙ্কজাইসওয়াল: আমি যে ফাইলটি সম্পাদনা করছি তাতে এই স্নিপেটটি (এবং জাভাস্ক্রিপ্টের জন্য pudbএবং অনুরূপ স্নিপেটগুলি debugger;) সন্নিবেশ করানোর জন্য আমার কাছে ভিমে একটি কী ম্যাপিং ছিল । আমার হয়ে যাওয়ার পরে ddব্রেকপয়েন্টটি সরিয়ে ফেলতে আমি কেবল (পুরো লাইনটি মুছুন)। এটি ডিবাগার আমদানি লাইনটিকে সংস্করণ নিয়ন্ত্রণে প্রতিশ্রুতিবদ্ধ করা বা ফাইলের শীর্ষে প্রথমে আমদানি প্রিসেট করার ঝুঁকি এড়ায়।
মিথ্যা রায়ান

10

আমার দৃষ্টিকোণ থেকে, আমরা সাধারণ কোড ডিবাগিং কার্যগুলিকে তিনটি পৃথক ব্যবহারের ধরণে বিভক্ত করতে পারি:

  1. কিছু একটি ব্যতিক্রম উত্থাপন করেছে : রানসরভার_প্লাস ' ওয়ার্কজেগ ডিবাগারটিকে উদ্ধারে। সমস্ত ট্রেস স্তরে কাস্টম কোড চালানোর ক্ষমতা হত্যাকারী। এবং আপনি যদি পুরোপুরি আটকে থাকেন তবে আপনি কেবল একটি ক্লিক দিয়ে ভাগ করার জন্য একটি গিস্ট তৈরি করতে পারেন।
  2. পৃষ্ঠাটি রেন্ডার করা হয়েছে, তবে ফলাফলটি ভুল : আবার, ওয়ার্কজেগ শিলা। কোডে ব্রেকপয়েন্ট তৈরি করতে assert Falseআপনি যে জায়গায় থামতে চান ঠিক সেখানে টাইপ করুন ।
  3. কোডটি ভুল কাজ করে তবে দ্রুত চেহারা কোনও কাজে দেয় না। সম্ভবত, একটি অ্যালগোরিদমিক সমস্যা। দীর্ঘশ্বাস. তারপর আমি সাধারণত ডিবাগার একটি কনসোল ব্যবহার বাড়িয়ে দিতে PuDB : import pudb; pudb.set_trace()। [I] পিডিবি-র প্রধান সুবিধাটি হ'ল পুডিবি (আপনি 80 এর দশকের দিকে তাকানোর সময়) কাস্টম ওয়াচ এক্সপ্রেশনগুলিকে বাতাসের সেট করে তোলে। এবং নেস্টেড লুপগুলির একটি গুচ্ছ ডিবাগিং একটি জিইউআই সহ অনেক সহজ।

আহ, হ্যাঁ, টেমপ্লেটগুলির দুর্দশা। সর্বাধিক প্রচলিত (আমার এবং আমার সহকর্মীদের কাছে) সমস্যাটি একটি ভুল প্রসঙ্গে: হয় আপনার ভেরিয়েবল নেই, বা আপনার ভেরিয়েবলের কোনও বৈশিষ্ট্য নেই। আপনি যদি ডিবাগ সরঞ্জামদণ্ড ব্যবহার করছেন , কেবলমাত্র "টেমপ্লেট" বিভাগে প্রসঙ্গটি পরীক্ষা করুন, বা এটি যথেষ্ট না হলে আপনার প্রসঙ্গটি পূরণ করার ঠিক পরে আপনার ভিউ'র কোডটিতে একটি বিরতি সেট করুন।

সুতরাং এটি যায়।


import pudb;pu.db
জাস্ট

6

আমি অত্যন্ত এপিডিবি (বর্ধিত পাইথন ডিবাগার) সুপারিশ করি।

https://bitbucket.org/dugan/epdb

জ্যাঙ্গো বা অন্যান্য পাইথন ওয়েবসার্সগুলি ডিবাগ করার জন্য এপিডিবি সম্পর্কে আমি একটি জিনিস পছন্দ করি তা হ'ল এপিডিবি.সার্ভ () কমান্ড। এটি একটি ট্রেস সেট করে এবং এটি একটি স্থানীয় বন্দরে পরিবেশন করে যা আপনি সংযোগ করতে পারেন। সাধারণ ব্যবহারের কেস:

আমার একটি মতামত রয়েছে যে আমি ধাপে ধাপে যেতে চাই। আমি ট্রেসটি সেট করতে চাইলে নীচে প্রবেশ করব।

import epdb; epdb.serve()

এই কোডটি কার্যকর হয়ে গেলে আমি একটি পাইথন ইন্টারপ্রেটার খুলি এবং পরিবেশনার দৃষ্টান্তের সাথে সংযুক্ত করি। আমি সমস্ত মান বিশ্লেষণ করতে পারি এবং এন, এস, ইত্যাদি স্ট্যান্ডার্ড পিডিবি কমান্ড ব্যবহার করে কোডটি দিয়ে পদক্ষেপ নিতে পারি

In [2]: import epdb; epdb.connect()
(Epdb) request
<WSGIRequest
path:/foo,
GET:<QueryDict: {}>, 
POST:<QuestDict: {}>,
...
>
(Epdb) request.session.session_key
'i31kq7lljj3up5v7hbw9cff0rga2vlq5'
(Epdb) list
 85         raise some_error.CustomError()
 86 
 87     # Example login view
 88     def login(request, username, password):
 89         import epdb; epdb.serve()
 90  ->     return my_login_method(username, password)
 91
 92     # Example view to show session key
 93     def get_session_key(request):
 94         return request.session.session_key
 95

এবং আরও অনেক বেশি যা আপনি যে কোনও সময় এপিডিবি সহায়তা টাইপ করতে শিখতে পারেন।

আপনি যদি একই সাথে একাধিক এপিডিবি উদাহরণ পরিবেশন করতে বা সংযোগ করতে চান তবে শুনতে পোর্টটি নির্দিষ্ট করতে পারেন (ডিফল্ট হ'ল 8080)। অর্থাত

import epdb; epdb.serve(4242)

>> import epdb; epdb.connect(host='192.168.3.2', port=4242)

নির্দিষ্ট না হলে 'লোকালহোস্ট' এ হোস্ট ডিফল্ট। আপনার স্থানীয় ল্যানের ডেভলপমেন্ট সার্ভারের মতো আপনি কীভাবে স্থানীয় উদাহরণ ব্যতীত অন্য কিছু ডিবাগ করতে এটি ব্যবহার করতে পারেন তা প্রদর্শনের জন্য আমি এটি এখানে ছুঁড়েছি। স্পষ্টতই, আপনি যদি এটি করেন তবে সতর্কতা অবলম্বন করুন যে সেট ট্রেসটি কখনই এটি আপনার প্রোডাকশন সার্ভারে না তৈরি করে!

দ্রুত নোট হিসাবে, আপনি এখনও এপিডিবি ( import epdb; epdb.set_trace()) সহ গৃহীত উত্তর হিসাবে একই জিনিস করতে পারেন তবে আমি পরিবেশন কার্যকারিতা হাইলাইট করতে চেয়েছিলাম যেহেতু আমি এটি এত দরকারী বলে খুঁজে পেয়েছি।


২০১২ সাল থেকে এপিডিবি আপডেট করা হয়নি D আপনি কি কখনও জাঙ্গো এবং / অথবা পাইথনের নতুন সংস্করণে এটি ব্যবহার করতে সমস্যা বোধ করেন?
সেপ্টেম্বর

পাইথন 2 এর বিপরীতে এটি ব্যবহার করে আমি কখনই সমস্যায় পড়িনি (বিশেষত 2.4-2.7)। আমি এটি কয়েক দিন আগে ব্যবহার করেছি fact আমি পাইথন 3 দিয়ে কখনও চেষ্টা করি নি
জ্যাকিন্ডা

1
আমি পাইথন ২.7-তে জ্যাঙ্গো ১.৮ চালাচ্ছি এবং আমি এপিডিবি.সিজারের সাথে কথা বলার জন্য এপিডিবি.কনেক্ট পেতে পারি না। আমি শুধু একটি সময়সীমা পেতে।
ডেভিড ওয়াটসন

6

আমি সবেমাত্র wdb ( http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401 খুঁজে পেয়েছি ) । এটিতে সমস্ত বেল এবং হুইসেল সহ একটি দুর্দান্ত ইউজার ইন্টারফেস / জিইউআই রয়েছে। লেখক ডাব্লুডিবির সম্পর্কে এটি বলেছেন -

"পাইকার্মের মতো আইডিই রয়েছে যার নিজস্ব ডিবাগার রয়েছে They তারা অনুরূপ বা সমান বৈশিষ্ট্যযুক্ত বৈশিষ্ট্য সরবরাহ করে ... তবে তাদের ব্যবহার করার জন্য আপনাকে নির্দিষ্ট নির্দিষ্ট আইডিই ব্যবহার করতে হবে (এবং এর কিছুগুলি নিখরচায় রয়েছে বা সবার জন্য উপলভ্য নাও হতে পারে) প্ল্যাটফর্ম)। আপনার প্রয়োজনের জন্য সঠিক সরঞ্জামটি চয়ন করুন ""

ভেবেছিলাম আমি কেবল এটি পাস করব।

পাইথন ডিবাগারগুলি সম্পর্কে একটি খুব সহায়ক নিবন্ধ: https://zapier.com/engineering/debugging-python-boss/

অবশেষে , আপনি যদি জাজানোতে আপনার কল স্ট্যাকের একটি দুর্দান্ত গ্রাফিকাল মুদ্রণ দেখতে চান, চেকআউট: https://github.com/joerick/pyinstrument । MIDDLEWARE_CLASSES এ কেবল পাইনস্ট্রিম.মিডলওয়ার.প্রফিলারমিজডওয়ার যুক্ত করুন, তারপরে প্রোফাইলার সক্রিয় করার জন্য অনুরোধ URL এর শেষে প্রোফাইল যুক্ত করুন?

কমান্ড লাইন থেকে বা মডিউল হিসাবে আমদানি করে পাইয়েনসেটও চালাতে পারে।


পাইচার্ম কেবল পাইডিভ ব্যবহার করে আমার মনে হয়, এটি নিজস্ব নয়।
রব গ্রান্ট

6

যোগ import pdb; pdb.set_trace()বা breakpoint() (ফর্ম python3.7) পাইথন কোডে সংশ্লিষ্ট লাইনে এবং এটি চালানো। একটি ইন্টারেক্টিভ শেল দিয়ে কার্যকর করা বন্ধ হবে। শেলটিতে আপনি পাইথন কোড (যেমন মুদ্রণ ভেরিয়েবল) চালাতে পারেন বা কমান্ড ব্যবহার করতে পারেন যেমন:

  • c কার্যকর করা চালিয়ে যান
  • n একই ফাংশনের মধ্যে পরবর্তী লাইনে পদক্ষেপ
  • s এই ফাংশন বা একটি ডাকা ফাংশন পরবর্তী লাইনে পদক্ষেপ
  • q ডিবাগার / মৃত্যুদণ্ড কার্যকর করুন

আরও দেখুন: https://poweruser.blog/setting-a-breakPoint-in-python-438e23fe6b28


5

জ্যাঙ্গো কোডটি ডিবাগ করার জন্য আপনার সেরা বিকল্পগুলির মধ্যে একটি হ'ল ডাব্লুডিবি: https://github.com/Kozea/wdb এর মাধ্যমে

ডাব্লুডিবি পাইথন 2 (2.6, 2.7), পাইথন 3 (3.2, 3.3, 3.4, 3.5) এবং পাইপির সাথে কাজ করে। আরও ভাল, পাইথন 3 এ চলমান ডাব্লুডিবি সার্ভারের সাথে পাইথন 2 প্রোগ্রামটি ডিবাগ করা সম্ভব এবং তৃতীয় কম্পিউটারে ওয়েব পৃষ্ঠার অভ্যন্তরে অন্য কম্পিউটারে ডিবাগিং সার্ভার দিয়ে একটি কম্পিউটারে চলমান একটি প্রোগ্রাম ডিবাগ করা সম্ভব! এমনকি বেটেয়ার, ওয়েব ইন্টারফেস থেকে কোড ইঞ্জেকশন ব্যবহার করে বর্তমানে চলমান অজগর প্রক্রিয়া / থ্রেডকে থামানো সম্ভব। (এর জন্য জিডিবি এবং পিট্রেস সক্ষম হওয়া দরকার) অন্য কথায় এটি দুর্দান্ত বৈশিষ্ট্যযুক্ত আপনার ব্রাউজারে সরাসরি পিডিবি'র একটি খুব বর্ধিত সংস্করণ।

সার্ভারটি ইনস্টল করুন এবং চালান, এবং আপনার কোডে যুক্ত করুন:

import wdb
wdb.set_trace()

লেখকের মতে, শ্রদ্ধার সাথে প্রধান পার্থক্যগুলি হ'ল pdb:

যারা প্রকল্পটি জানেন না তাদের জন্য, wdb হলেন পিডিবির মতো পাইথন ডিবাগার, তবে একটি স্মার্ট ওয়েব ফ্রন্ট-এন্ড এবং অতিরিক্ত অতিরিক্ত বৈশিষ্ট্য সহ যেমন:

  • উত্স বাক্য গঠন হাইলাইট
  • ভিজ্যুয়াল ব্রেকপয়েন্টস
  • ইন্টারেক্টিভ কোড সমাপ্তি জেডি ব্যবহার করে
  • অবিরাম ব্রেকপয়েন্টস
  • মাউস মাল্টিথ্রেডিং / মাল্টিপ্রসেসিং সমর্থন ব্যবহার করে গভীর বস্তুগুলি পরিদর্শন
  • রিমোট ডিবাগিং
  • এক্সপ্রেশন দেখুন
  • ডিবাগার কোড সংস্করণে
  • ত্রুটি ভাঙতে জনপ্রিয় ওয়েব সার্ভারগুলির একীকরণ
  • উদাহরণস্বরূপ ওয়ার্কজেগ ডিবাগারের বিপরীতে ট্রেস (ময়না তদন্তের সময়) ব্যতিক্রম ব্যতীত breaking
  • কোড ইঞ্জেকশনের মাধ্যমে বর্তমানে চলমান প্রোগ্রামগুলিতে ব্রেকিং (সমর্থিত সিস্টেমে)

এটিতে দুর্দান্ত ব্রাউজার-ভিত্তিক ব্যবহারকারী ইন্টারফেস রয়েছে। ব্যবহার করার জন্য একটি আনন্দ! :)


পিডিবিতে পার্থক্য কী?
ডুনাটোটাটোস

4

আমি পাইচার্ম এবং বিভিন্ন ডিবাগ সরঞ্জাম ব্যবহার করি । নতুনদের জন্য সহজ জিনিসগুলি সেট আপ সম্পর্কে একটি সুন্দর নিবন্ধও সেট করুন। আপনি এখানে শুরু করতে পারেন। এটি পিডিবি এবং জিইউআই ডিবাগিংয়ের বিষয়ে জানায় জাজো প্রকল্পগুলি with আশা করি তাদের কাছ থেকে কেউ উপকৃত হবে।


2

জ্যাঙ্গো উন্নয়নের জন্য যদি আপ্টানা ব্যবহার করা হয় তবে এটি দেখুন: http://www.youtube.com/watch?v=qQh-UQFltJQ

যদি তা না হয় তবে এটি ব্যবহার করে বিবেচনা করুন।


2

সর্বাধিক বিকল্প এলরেডি উল্লেখ করা হয়। টেমপ্লেট প্রসঙ্গে মুদ্রণ করতে, আমি এটির জন্য একটি সাধারণ গ্রন্থাগার তৈরি করেছি। Https://github.com/edoburu/django-debugtools দেখুন

আপনি এটি কোনও {% load %}নির্মাণ ছাড়াই টেমপ্লেট প্রসঙ্গে মুদ্রণ করতে ব্যবহার করতে পারেন :

{% print var %}   prints variable
{% print %}       prints all

এটি কোনও <pre>ট্যাগে ভেরিয়েবলগুলি প্রদর্শনের জন্য কাস্টমাইজড পি-প্রিন্ট ফর্ম্যাট ব্যবহার করে ।


2

আমি দেখতে পাচ্ছি ভিজুয়াল স্টুডিও কোড জ্যাঙ্গো অ্যাপ্লিকেশনগুলি ডিবাগ করার জন্য দুর্দান্ত। স্ট্যান্ডার্ড পাইথন লঞ্চ.জসন প্যারামিটারগুলি python manage.pyসংযুক্ত ডিবাগারটি দিয়ে চালিত হয়, যাতে আপনি ব্রেকপয়েন্টগুলি সেট করতে পারেন এবং আপনার কোডটি আপনার পছন্দ মতো পদক্ষেপ নিতে পারেন।


2

যারা দুর্ঘটনাক্রমে লাইভ কমিটগুলিতে পিডিবি যুক্ত করতে পারে তাদের জন্য আমি # কোবজ উত্তরটির এই বর্ধনের পরামর্শ দিতে পারি:

@register.filter 
def pdb(element):
    from django.conf import settings
    if settings.DEBUG:    
        import pdb
        pdb.set_trace()
    return element

2

আমার নিজের অভিজ্ঞতা থেকে, দুটি উপায় আছে:

  1. আইপিডিবি ব্যবহার করুন যা উন্নত ডিবাগার পিডিবি পছন্দ করে।

    import ipdb;ipdb.set_trace()বা breakpoint() (পাইথন 3.7 থেকে)

  2. জাঙ্গো শেল ব্যবহার করুন, কেবল নীচের কমান্ডটি ব্যবহার করুন। আপনি যখন একটি নতুন দৃষ্টিভঙ্গি বিকাশ করছেন এটি এটি খুব সহায়ক।

    python manage.py shell


1

আমি পিডিবি ব্যবহার করার পরামর্শ দিচ্ছি।

import pdb
pdb.set_trace()

আপনি সমস্ত ভেরিয়েবলের মানগুলি পরিদর্শন করতে পারেন, ফাংশনে প্রবেশ করতে পারেন এবং আরও অনেক কিছু। https://docs.python.org/2/library/pdb.html

অনুরোধ, প্রতিক্রিয়া এবং database.i করার হিট সব ধরনের চেক আউট করার জন্য ব্যবহার করছি জ্যাঙ্গো-ডিবাগ-টুলবার https://github.com/django-debug-toolbar/django-debug-toolbar


1

যেমনটি এখানে অন্যান্য পোস্টে উল্লিখিত হয়েছে - আপনার কোডে ব্রেকপয়েন্টগুলি সেট করা এবং কোডটি আপনার প্রত্যাশার মতো আচরণ করে কিনা তা দেখার জন্য জ্যাঙ্গোর মতো কিছু শেখার দুর্দান্ত উপায় যেখানে এটি কীভাবে আচরণ করে - এবং আপনার কোডটি কী তা বোঝায় না করছে.

এটি করার জন্য আমি উইংআইড ব্যবহার করার পরামর্শ দেব। ঠিক যেমন অন্যান্য উল্লিখিত আইডিই যেমন সুন্দর এবং সহজেই ব্যবহার করা যায় ঠিক তেমনি দুর্দান্ত লেআউট এবং ব্রেকপয়েন্টগুলি সেট করা সহজ স্ট্যাকের মূল্যায়ন / সংশোধন করা ইত্যাদি through আমি এর একটি বড় ভক্ত।

এছাড়াও আমি পাইচার্ম ব্যবহার করি - এটিতে দুর্দান্ত স্ট্যাটিক কোড বিশ্লেষণ রয়েছে এবং তারা বুঝতে পারার আগে কখনও কখনও সমস্যাগুলিকে চিহ্নিত করতে সহায়তা করে।

ইতিমধ্যে উল্লিখিত হিসাবে জ্যাঙ্গো-ডিবাগ-টুলবারটি প্রয়োজনীয় - https://github.com/django-debug-toolbar/django-debug-toolbar

এবং স্পষ্টভাবে কোনও ডিবাগ বা বিশ্লেষণ সরঞ্জামটি না করে - আমার প্রিয় পছন্দের একটি হ'ল এসকিউএল প্রিন্টিং মিডলওয়্যারটি জ্যাঙ্গো স্নিপেট থেকে https://djangosnippets.org/snippets/290/ এ উপলব্ধ

এটি আপনার ভিউ তৈরি করেছে এমন এসকিউএল কোয়েরিগুলি প্রদর্শন করবে। এটি আপনাকে ওআরএম কী করছে এবং আপনার প্রশ্নাগুলি দক্ষ হলে বা আপনাকে আপনার কোডটি পুনরায় কাজ করতে (বা ক্যাশে যোগ করা) দরকার তা সম্পর্কে একটি ভাল ধারণা দেবে।

আমি আমার অ্যাপ্লিকেশনটি বিকাশ এবং ডিবাগ করার সময় ক্যোয়ারী পারফরম্যান্সের দিকে নজর রাখার জন্য এটি অমূল্য বলে মনে করি।

অন্য একটি টিপ - কেবলমাত্র এসকিউএল বিবৃতি না দিয়ে কেবল সংক্ষিপ্তসারটি দেখানোর জন্য আমি এটি নিজের ব্যবহারের জন্য সামান্য সংশোধন করেছি .... সুতরাং বিকাশ এবং পরীক্ষার সময় আমি সর্বদা এটি ব্যবহার করি। আমি আরও যোগ করেছি যে যদি লেন (কানেকশন.কিউয়েরিগুলি) পূর্বনির্ধারিত প্রান্তিকের চেয়ে বেশি হয় তবে এটি একটি অতিরিক্ত সতর্কতা প্রদর্শন করে।

তারপরে যদি আমি কিছু খারাপ দেখতে পাই (কোনও পারফরম্যান্স বা প্রশ্নের সংখ্যার দিক থেকে) ঘটছে তবে আমি কী চলছে তা দেখতে এসকিউএল স্টেটমেন্টগুলির পুরো প্রদর্শনটি ফিরে দেখলাম। যখন আপনি একাধিক বিকাশকারীদের সাথে একটি বৃহত জ্যাঙ্গো প্রকল্পে কাজ করছেন তখন খুব সহজ।


1

ব্যবহার pdbবা ipdb। এই দুইয়ের মধ্যে পার্থক্য হল আইপিডিবি অটো সম্পূর্ণ সমর্থন করে।

পিডিবি জন্য

import pdb
pdb.set_trace()

আইপিডিবি এর জন্য

import ipdb
ipdb.set_trace()

নতুন লাইনের হিট nকী কার্যকর করার জন্য, চালিয়ে যাও হিট cকী। ব্যবহার করে আরও বিকল্প চেক করুনhelp(pdb)


0

একটি অতিরিক্ত পরামর্শ।

আপনি লিভারেজ করতে nosetests এবং পিডিবি একসঙ্গে, বরং ইনজেকশনের pdb.set_trace()নিজে আপনার দেখার। সুবিধাটি হ'ল আপনি ত্রুটি শর্তগুলি প্রথমবার শুরু করার পরে তৃতীয় পক্ষের কোডে পর্যবেক্ষণ করতে পারবেন।

আজ আমার জন্য একটি ত্রুটি এখানে।

TypeError at /db/hcm91dmo/catalog/records/

render_option() argument after * must be a sequence, not int

....


Error during template rendering

In template /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
render_option() argument after * must be a sequence, not int
18  
19          {% if field|is_checkboxselectmultiple %}
20              {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
21          {% endif %}
22  
23          {% if field|is_radioselect %}
24              {% include 'bootstrap3/layout/radioselect.html' %}
25          {% endif %}
26  
27          {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
28  

      {% if field|is_checkbox and form_show_labels %}

এখন, আমি জানি যে এর অর্থ আমি ফর্মটির জন্য নির্মাতাকে গোফড করেছি এবং কোন ক্ষেত্রটি সমস্যা তা আমার ভাল ধারণাও রয়েছে। তবে, আমি কোনও টেমপ্লেটের মধ্যে খ্রিষ্টসম্পন্ন ফর্মগুলির সম্পর্কে কী অভিযোগ করছে তা দেখতে পিডিবি ব্যবহার করতে পারি ?

হ্যা আমি পারি. নাকেস্টেটে --pdb বিকল্পটি ব্যবহার করে :

tests$ nosetests test_urls_catalog.py --pdb

যত তাড়াতাড়ি আমি যেকোন ব্যতিক্রমকে হিট করার সাথে সাথে (পিরিয়ডলি হ্যান্ডেলগুলি সহ) পিডিবি যেখানে ঘটে তা থামায় এবং আমি চারপাশে দেখতে পারি।

  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 537, in __str__
    return self.as_widget()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 593, in as_widget
    return force_text(widget.render(name, self.value(), attrs=attrs))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 513, in render
    options = self.render_options(choices, [value])
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 543, in render_options
    output.append(self.render_option(selected_choices, *option))
TypeError: render_option() argument after * must be a sequence, not int
INFO lib.capture_middleware log write_to_index(http://localhost:8082/db/hcm91dmo/catalog/records.html)
INFO lib.capture_middleware log write_to_index:end
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py(543)render_options()
-> output.append(self.render_option(selected_choices, *option))
(Pdb) import pprint
(Pdb) pprint.PrettyPrinter(indent=4).pprint(self)
<django.forms.widgets.Select object at 0x115fe7d10>
(Pdb) pprint.PrettyPrinter(indent=4).pprint(vars(self))
{   'attrs': {   'class': 'select form-control'},
    'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]],
    'is_required': False}
(Pdb)         

এখন, এটি স্পষ্ট যে খাঁটি ক্ষেত্র নির্মাতার কাছে আমার পছন্দগুলি যুক্তি যেমন টিপলসের তালিকা / তালিকার চেয়ে তালিকার মধ্যে একটি তালিকা ছিল।

 'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]

ঝরঝরে বিষয় হ'ল এই পিডিবিটি ক্রাইপাই কোডের মধ্যেই ঘটছে, আমার নয় এবং আমি নিজে এটি প্রবেশ করানোর দরকার পড়েনি didn't


0

উন্নয়নের সময়, একটি দ্রুত যোগ করুন

assert False, value

কোনও ডিবাগার ব্যবহার না করেই ভিউ বা অন্য কোথাও সমস্যা নির্ণয় করতে সহায়তা করতে পারে।

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