অজগর: কীভাবে ব্যতিক্রম ঘটেছে তা আমি কীভাবে জানব?


229

আমার প্রধান প্রোগ্রাম দ্বারা ডাকা একটি ফাংশন আছে:

try:
    someFunction()
except:
    print "exception happened!"

তবে ফাংশনটি সম্পাদনের মাঝামাঝি এটি ব্যতিক্রম উত্থাপন করে, তাই এটি exceptঅংশে লাফ দেয় ।

আমি কীভাবে দেখতে পাচ্ছি someFunction()যে এর ব্যতিক্রম ঘটেছে তার মধ্যে কী ঘটেছিল ?


9
প্রোগ্রামে একবারে ব্যতীত আর কখনও খালি except:( খালি ছাড়া raise) কখনই ব্যবহার করবেন না এবং সম্ভবত ততক্ষণ না।
মাইক গ্রাহাম

আপনি যদি একাধিক exceptধারা ব্যবহার করেন তবে আপনাকে ব্যতিক্রমের প্রকারটি পরীক্ষা করতে হবে না, এটি সাধারণত একটি নির্দিষ্ট ব্যতিক্রম প্রকার অনুসারে কাজ করার জন্য করা হয়।
রিক পোগি

3
যদি আপনি ব্যতিক্রমের ধরণের বিষয়ে চিন্তা করেন তবে এটি কারণ আপনি ইতিমধ্যে বিবেচনা করেছেন যে কোন ধরণের ব্যতিক্রম যুক্তিযুক্তভাবে ঘটতে পারে।
কার্ল নচেটেল

3
exceptব্লকের অভ্যন্তরে ব্যতিক্রমটি sys.exc_info()ফাংশনের মাধ্যমে উপলভ্য হয় - এই ফাংশনটি তিনটি মানকে দেয় যা বর্তমানে পরিচালিত ব্যতিক্রম সম্পর্কে তথ্য দেয়।
পাইওটর ডব্রোগস্ট

উত্তর:


383

অন্যান্য উত্তরগুলি সমস্ত নির্দেশ করে যে আপনার জেনেরিক ব্যতিক্রমগুলি ধরা উচিত নয়, তবে কেউ "বিধি" ভঙ্গ করতে পারলে কেন বুঝতে হবে তা আপনাকে বলতে চাইবে বলে মনে হয় না। এখানে একটি ব্যাখ্যা। মূলত, এটি এমনটি যাতে আপনি আড়াল না করেন:

সুতরাং আপনি যতক্ষণ না এই বিষয়গুলির কোনওটি না করার বিষয়ে যত্নশীল হন, সাধারণ ব্যতিক্রম ধরা ঠিক হবে। উদাহরণস্বরূপ, আপনি ব্যবহারকারীকে অন্যভাবে ব্যতিক্রম সম্পর্কে তথ্য সরবরাহ করতে পারেন, যেমন:

  • জিইউআই-তে সংলাপ হিসাবে ব্যতিক্রমগুলি উপস্থাপন করুন
  • একটি মাল্টিথ্রেডিং বা মাল্টিপ্রসেসিং অ্যাপ্লিকেশনটিতে কোনও কর্মী থ্রেড বা প্রক্রিয়া থেকে নিয়ন্ত্রণকারী থ্রেড বা প্রক্রিয়াতে ব্যতিক্রম স্থানান্তর করুন

তাহলে কীভাবে জেনেরিক ব্যতিক্রম ধরা যায়? বিভিন্ন উপায় আছে। আপনি যদি কেবল ব্যতিক্রম বিষয়টি চান তবে এটি এটি করুন:

try:
    someFunction()
except Exception as ex:
    template = "An exception of type {0} occurred. Arguments:\n{1!r}"
    message = template.format(type(ex).__name__, ex.args)
    print message

হার্ড-টু মিস পদ্ধতিতে ব্যবহারকারীর নজরে আনার বিষয়টি নিশ্চিত করুন message! উপরে প্রদর্শিত হিসাবে এটি প্রিন্ট করা যথেষ্ট নাও হতে পারে যদি বার্তাটি প্রচুর অন্যান্য বার্তাগুলিতে সমাহিত করা হয়। ব্যবহারকারীদের মনোযোগ পেতে ব্যর্থ সব ব্যতিক্রম গিলতে শামিল, এবং যদি সেখানে এক ছাপ তুমি দূরে আসা উচিত সাথে এই পাতা উত্তর পড়ার পর, এটা যে এই হয় একটি ভাল জিনিস না । একটি raiseবিবৃতি দিয়ে বাকী ব্লকটি শেষ করে দেওয়া সমস্যার ব্যতিক্রমটিকে স্বচ্ছভাবে পুনর্বিবেচনা করে সমস্যার প্রতিকার করবে।

উপরোক্ত এবং except:কোনও যুক্তি ছাড়াই ব্যবহারের পার্থক্য দ্বিগুণ:

  • একটি খালি except:আপনাকে পরিদর্শন করতে ব্যতিক্রম বস্তু দেয় না
  • ব্যতিক্রম SystemExit, KeyboardInterruptএবং GeneratorExitউপরের কোড, যা সাধারণত কি আপনি চান দ্বারা ধরা হয় না। দেখুন ব্যতিক্রম অনুক্রমের

আপনিও যদি একই স্ট্যাকট্রেস চান তবে যদি আপনি ব্যতিক্রম না ধরেন তবে আপনি এটি পেতে পারেন (এখনও ক্লজটি বাদে এখনও):

import traceback
print traceback.format_exc()

আপনি যদি loggingমডিউলটি ব্যবহার করেন তবে আপনি লগের ব্যতিক্রমটি (বার্তা সহ) মুদ্রণ করতে পারেন:

import logging
log = logging.getLogger()
log.exception("Message for you, sir!")

আপনি যদি আরও গভীর খনন করতে এবং স্ট্যাকটি পরীক্ষা করতে চান তবে ভেরিয়েবল ইত্যাদি দেখুন, ব্লক বাদে মডিউলটির post_mortemকাজটি ব্যবহার করুন pdb:

import pdb
pdb.post_mortem()

আমি বাগের শিকারের সময় এই শেষ পদ্ধতিটি অমূল্য বলে মনে করেছি।


1
traceback.print_exc () আপনার আরও জটিল "" এর মত একই কাজ করবে j
গুরুগেহ

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

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

10
@ রিক আমি মনে করি আপনার খুব ভাল এই সমস্ত প্রয়োজন হতে পারে । উদাহরণস্বরূপ, আপনার যদি একটি জিইউআই এবং ব্যাকএন্ড সহ একটি প্রোগ্রাম থাকে এবং আপনি আপনার প্রোগ্রামটি স্ট্যাক ট্রেস ছাড়ার পরিবর্তে ব্যাকএন্ড থেকে সমস্ত ব্যতিক্রম জিইউআই বার্তা হিসাবে উপস্থাপন করতে চান। এই জাতীয় ক্ষেত্রে, আপনার জেনেরিক ব্যতিক্রম ধরা উচিত , কথোপকথনের জন্য একটি ট্রেসব্যাক পাঠ্য তৈরি করা উচিত , ব্যতিক্রমটি লগইন করতে হবে এবং যদি ডিবাগ মোডে থাকে তবে ময়না তদন্ত করুন।
লাউরিৎস ভি। থালো

18
@ রিকপোগি: নিষ্পাপ চিন্তাভাবনা। এমন অনেক যুক্তিসঙ্গত পরিস্থিতি রয়েছে যখন আপনাকে অন্য কারও কোড থেকে ব্যতিক্রম ধরা দরকার এবং আপনি কী জানেন না কী ব্যতিক্রম উত্থাপিত হবে।
stackoverflowuser2010

63

ব্যতিক্রমী বস্তুর অন্তর্ভুক্ত শ্রেণীর নাম পান:

e.__class__.__name__

এবং print_exc () ফাংশন ব্যবহার করে স্ট্যাক ট্রেস প্রিন্ট করা হবে যা কোনও ত্রুটি বার্তার জন্য প্রয়োজনীয় তথ্য।

এটার মত:

from traceback import print_exc

class CustomException(Exception): pass

try:
    raise CustomException("hi")
except Exception, e:
    print 'type is:', e.__class__.__name__
    print_exc()
    # print "exception happened!"

আপনি এভাবে আউটপুট পাবেন:

type is: CustomException
Traceback (most recent call last):
  File "exc.py", line 7, in <module>
    raise CustomException("hi")
CustomException: hi

এবং মুদ্রণ এবং বিশ্লেষণের পরে, কোড ব্যতিক্রম না পরিচালনা এবং কেবল কার্যকর করতে সিদ্ধান্ত নিতে পারে raise:

from traceback import print_exc

class CustomException(Exception): pass

def calculate():
    raise CustomException("hi")

try:
    calculate()
except Exception, e:
    if e.__class__ == CustomException:
        print 'special case of', e.__class__.__name__, 'not interfering'
        raise
    print "handling exception"

আউটপুট:

special case of CustomException not interfering

এবং দোভাষী অনুবাদ ব্যতিক্রম:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    calculate()
  File "test.py", line 6, in calculate
    raise CustomException("hi")
__main__.CustomException: hi

raiseআসল ব্যতিক্রমের পরে কল স্ট্যাকটি আরও প্রচার করে চলেছে। ( সম্ভাব্য ক্ষতি থেকে সাবধান ) আপনি যদি নতুন ব্যতিক্রম উত্থাপন করেন তবে এটি নতুন (খাটো) স্ট্যাক ট্রেস বহন করে

from traceback import print_exc

class CustomException(Exception): pass

def calculate():
    raise CustomException("hi")

try:
    calculate()
except Exception, e:
    if e.__class__ == CustomException:
        print 'special case of', e.__class__.__name__, 'not interfering'
        #raise CustomException(e.message)
        raise e
    print "handling exception"

আউটপুট:

special case of CustomException not interfering
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    raise CustomException(e.message)
__main__.CustomException: hi    

লক্ষ্য করুন কীভাবে ট্রেসব্যাক calculate()লাইন থেকে ফাংশনকে অন্তর্ভুক্ত করে না 9যা মূল ব্যতিক্রমের উত্স e


আপনি একটি স্ট্রিং হিসাবে ট্রেসব্যাক সঞ্চয় করতে চান, আপনি ব্যবহার করতে পারেন traceback.format_exc()হিসাবে ভাল
Stevoisiak

1
e.__class__.__name__এটি type(e).__name__কি উপরের উত্তর দ্বারা পরামর্শ হিসাবে একই ?
information_interchange

1
হ্যাঁ প্রশ্ন এবং গৃহীত উত্তরের সামগ্রী সময়ের সাথে পুরোপুরি পরিবর্তিত হয়েছে। এটি লজ্জার বিষয় যে অন্যান্য অংশগ্রহণকারীদের এসও যন্ত্রপাতি দ্বারা অবহিত করা হয়নি :(
অ্যালেক্স

14

আপনার সাধারণত সমস্ত সম্ভাব্য ব্যতিক্রমগুলি ধরা উচিত নয় try: ... exceptকারণ এটি অত্যধিক বিস্তৃত। যে কারণেই ঘটবে বলে মনে করা হয় কেবল তাদের ধরুন। আপনার যদি সত্যিই অবশ্যই করা আবশ্যক, উদাহরণস্বরূপ, আপনি যদি ডিবাগ করার সময় কিছু সমস্যা সম্পর্কে আরও জানতে চান, আপনার করা উচিত

try:
    ...
except Exception as ex:
    print ex # do whatever you want for debugging.
    raise    # re-raise exception.

17
এখানে "কখনই" শব্দটির ব্যবহার এতটা ভুল হয়নি been আমি try: ... except Exception:প্রায় প্রচুর জিনিস ব্যবহার করি , যেমন নেটওয়ার্ক নির্ভর লাইব্রেরিগুলির ব্যবহার, বা কোনও ডেটা মাসসিউজ যা তার কাছে অদ্ভুত জিনিস প্রেরণ পেতে পারে। স্বাভাবিকভাবেই আমারও সঠিক লগিং আছে have ইনপুট ডেটাতে একক ভুলের ক্ষেত্রে প্রোগ্রামটি চালিয়ে যাওয়া চালিয়ে যাওয়ার পক্ষে এটি অত্যন্ত গুরুত্বপূর্ণ।
thnee

3
ব্যবহার করে কোনও ইমেল প্রেরণে উত্থাপিত হতে পারে এমন সমস্ত ব্যতিক্রম কখনও ধরার চেষ্টা করেছেন smtplib?
লিনাসগ

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

1
সমস্ত ব্যতিক্রম ধরা এটি পুরোপুরি যুক্তিসঙ্গত। আপনি যদি কোনও তৃতীয় পক্ষের লাইব্রেরি কল করে থাকেন তবে আপনি জানেন না যে সেই লাইব্রেরিতে কী ব্যতিক্রম উত্থাপিত হবে। এই ক্ষেত্রে, একমাত্র অবলম্বন হ'ল সমস্ত ব্যতিক্রম ধরা, উদাহরণস্বরূপ কোনও ফাইলে লগ ইন করা।
stackoverflowuser2010

ঠিক আছে, আপনি ঠিক বলেছেন, আমি আমার উত্তরটি পুনরায় লিখব যাতে পরিষ্কার হয়ে যায় যে সমস্ত ক্যাচের জন্য বৈধ ব্যবহারের কেস রয়েছে।
হচল

10

যদি somefunctionনা খুব খারাপ কোডড লেগ্যাসি ফাংশন না থাকে, আপনি যা জিজ্ঞাসা করছেন তা আপনার প্রয়োজন হবে না।

exceptবিভিন্নভাবে বিভিন্ন ব্যতিক্রম হ্যান্ডেল করতে একাধিক ধারা ব্যবহার করুন :

try:
    someFunction()
except ValueError:
    # do something
except ZeroDivision:
    # do something else

মূল কথাটি হ'ল আপনার জেনেরিক ব্যতিক্রম ধরা উচিত নয়, তবে কেবল আপনার প্রয়োজন। আমি নিশ্চিত যে আপনি অপ্রত্যাশিত ত্রুটি বা বাগগুলি ছায়াতে চান না।


8
আপনি যদি কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছেন তবে এটির ভিতরে কী ব্যতিক্রম উত্থাপিত হবে তা আপনি জানেন না। কীভাবে আপনি সম্ভবত এই সমস্তগুলি পৃথকভাবে ধরতে পারেন?
stackoverflowuser2010

8

বেশিরভাগ উত্তর except (…) as (…):সিনট্যাক্সের দিকে নির্দেশ করে (ঠিক তাই) তবে একই সময়ে কেউ ঘরে একটি হাতি সম্পর্কে কথা বলতে চায় না, যেখানে হাতিটি sys.exc_info()কাজ করছে। থেকে ডকুমেন্টেশন এর sys মডিউল (জোর খনি):

এই ফাংশনটি তিনটি মানের একটি দ্বিগুণ ফিরিয়ে দেয় যা বর্তমানে পরিচালিত ব্যতিক্রম সম্পর্কে তথ্য দেয়।
(…)
যদি স্ট্যাকের কোথাও কোনও ব্যতিক্রম হ্যান্ডেল করা না থাকে তবে তিনটি মান নেই এমন একটি টুপল ফেরত দেওয়া হবে। অন্যথায়, ফিরে আসা মানগুলি হ'ল (টাইপ, মান, ট্রেসব্যাক)। তাদের অর্থ হ'ল: টাইপ হ্যান্ডেল করা ব্যতিক্রমের ধরণটি পায় (বেসএক্সেপশনের একটি সাবক্লাস); মান ব্যতিক্রম উদাহরণ পায় (ব্যতিক্রম ধরণের উদাহরণ); ট্রেসব্যাক একটি ট্রেসব্যাক অবজেক্ট পায় (রেফারেন্স ম্যানুয়াল দেখুন) যা কলটি স্ট্যাকটিকে এমন জায়গায় আবদ্ধ করে যেখানে ব্যতিক্রমটি মূলত ঘটেছে।

আমি মনে করি sys.exc_info()এটির মূল প্রশ্নের সর্বাধিক প্রত্যক্ষ উত্তর হিসাবে বিবেচনা করা যেতে পারে আমি কীভাবে ব্যতিক্রম ঘটেছে তা আমি কীভাবে জানতে পারি?


1
এটি আমার সঠিক উত্তর কারণ এটি কী ব্যতিক্রম ঘটছে তা সমস্যার সমাধান করে তাই খালি রাখার পরিবর্তে আমার কী করা উচিত except। কেবলমাত্র সম্পূর্ণতার জন্য, exctype, value = sys.exc_info()[:2]আপনাকে ব্যতিক্রম প্রকারটি বলবে যা এরপরে ব্যবহার করা যেতে পারে except
ওন্দ্রেজ বার্কার্ট

5

চেষ্টা করুন: ব্যতিক্রম ব্যতীত কিছু ফাংশন () ব্যতীত:

#this is how you get the type
excType = exc.__class__.__name__

#here we are printing out information about the Exception
print 'exception type', excType
print 'exception msg', str(exc)

#It's easy to reraise an exception with more information added to it
msg = 'there was a problem with someFunction'
raise Exception(msg + 'because of %s: %s' % (excType, exc))

-1 ব্যবহার exc.__class__.__name__ইতিমধ্যে Alex এর উত্তরে প্রস্তাব করা হয়েছে - stackoverflow.com/a/9824060/95735
পাযত্র Dobrogost

3

এই উত্তরগুলি ডিবাগিংয়ের জন্য সূক্ষ্ম, তবে প্রোগ্রামালিটিকভাবে ব্যতিক্রমটি isinstance(e, SomeException)পরীক্ষার জন্য সহজ হতে পারে, কারণ এটি SomeExceptionখুব সাবক্লাসগুলির জন্যও পরীক্ষা করে, তাই আপনি ব্যতিক্রমীকরণের স্তরক্রমের ক্ষেত্রে প্রযোজ্য কার্যকারিতা তৈরি করতে পারেন।


1

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

path = 'app.p'

def load():
    if os.path.exists(path):
        try:
            with open(path, 'rb') as file:
                data = file.read()
                inst = pickle.load(data)
        except Exception as e:
            inst = solve(e, 'load app data', easy=lambda: App(), path=path)()
    else:
        inst = App()
    inst.loadWidgets()

# e.g. A solver could search for app data if desc='load app data'
def solve(e, during, easy, **kwargs):
    class_name = e.__class__.__name__
    print(class_name + ': ' + str(e))
    print('\t during: ' + during)
    return easy

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

দেখানো উদাহরণে, একটি সমাধান হতে পারে অন্য কোথাও সঞ্চিত অ্যাপ্লিকেশন ডেটা সন্ধান করা, যদি 'অ্যাপ.পি' ফাইলটি ভুল করে মুছে ফেলা হয় তবে বলুন say

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


0

লরিৎজের উত্তরে যোগ করতে আমি ব্যতিক্রম হ্যান্ডলিংয়ের জন্য একটি ডেকরেটর / মোড়ক তৈরি করেছি এবং কোন ধরণের ব্যতিক্রম ঘটেছে তার মোড়কের লগগুলি।

class general_function_handler(object):
    def __init__(self, func):
        self.func = func
    def __get__(self, obj, type=None):
        return self.__class__(self.func.__get__(obj, type))
    def __call__(self, *args, **kwargs):
        try:
            retval = self.func(*args, **kwargs)
        except Exception, e :
            logging.warning('Exception in %s' % self.func)
            template = "An exception of type {0} occured. Arguments:\n{1!r}"
            message = template.format(type(e).__name__, e.args)
            logging.exception(message)
            sys.exit(1) # exit on all exceptions for now
        return retval

এটি একটি শ্রেণি পদ্ধতিতে বা ডেকরেটারের সাথে স্ট্যান্ডেলোন ফাংশনে ডাকা যেতে পারে:

@general_function_handler

সম্পূর্ণ উদাহরণের জন্য সম্পর্কে আমার ব্লগটি দেখুন: http://ryaneirwin.wordpress.com/2014/05/31/python-decorators- এবং- অভিজ্ঞতা - হ্যান্ডলিং /


0

লরিৎস প্রস্তাবিত হিসাবে আপনি এটি শুরু করতে পারেন:

except Exception as ex:

এবং তারপরে ঠিক এটি print exপছন্দ করতে:

try:
    #your try code here
except Exception as ex:
    print ex

আপনার উত্তরটি কি একা দাঁড়িয়ে যায় আপনি কি কিছুটা বিস্তৃত করতে পারেন?
জিএইচসি

1
নিশ্চিত: আপনি ধরা পড়ে যাওয়া ব্যতিক্রমটি এইভাবে মুদ্রণ করতে পারেন: চেষ্টা করুন: প্রাক্তন ব্যতিক্রম ব্যতীত আপনার এখানে চেষ্টা করুন কোড: প্রাক্তন প্রিন্ট এখন ত্রুটিটি মুদ্রিত হবে
গুরা


-2

আপনার প্রশ্নটি: "আমি কীভাবে কিছুটা ফাংশন () এ ব্যতিক্রম ঘটায় যার ফলে ঘটেছিল তা ঠিক কীভাবে দেখতে পাব?"

আমার কাছে মনে হচ্ছে আপনি কীভাবে উত্পাদন কোডে অপ্রত্যাশিত ব্যতিক্রমগুলি পরিচালনা করবেন (যতগুলি উত্তর অনুমান করা হয়েছে) কীভাবে জিজ্ঞাসা করছেন না, তবে কীভাবে বিকাশের সময় একটি বিশেষ ব্যতিক্রম ঘটছে তা কীভাবে খুঁজে বের করবেন।

সবচেয়ে সহজ উপায় হ'ল একটি ডিবাগার ব্যবহার করা যেখানে থামানো যায় যেখানে অপ্রয়োজনীয় ব্যতিক্রম ঘটে, পছন্দমতো বাইরে না আসে, যাতে আপনি ভেরিয়েবলগুলি পরীক্ষা করতে পারেন। উদাহরণস্বরূপ, Eclipse ওপেন সোর্স IDE এর পাইডেভ এটি করতে পারে। অন্ধকার যে সক্রিয় করার জন্য, ডিবাগ দৃষ্টিকোণ খুলুন, নির্বাচন Manage Python Exception Breakpointsমধ্যে Runমেনু, এবং চেক Suspend on uncaught exceptions


-4

পাইথন মুদ্রণের ফলে ব্যতিক্রম এবং ট্রেসব্যাক ধরা থেকে বিরত থাকুন কী ব্যতিক্রম ঘটেছে তা আপনাকে জানিয়ে দেবে।

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