ই.প্রিন্টস্ট্যাকট্রেস পাইথনের সমতুল্য


207

আমি জানি যে print(e)(যেখানে একটি ব্যতিক্রম রয়েছে) ঘটে যাওয়া ব্যতিক্রমগুলি মুদ্রণ করে তবে আমি জাভা'র পাইথন সমতুল্যটি অনুসন্ধান করার চেষ্টা করছিলাম e.printStackTrace()যা ঠিক কোন রেখার রেখাটির ব্যতিক্রমটি আবিষ্কার করে এবং এর পুরো ট্রেস মুদ্রণ করে।

e.printStackTrace()পাইথনের সমতুল্য কেউ আমাকে বলতে পারেন ?

উত্তর:


280
import traceback
traceback.print_exc()

কোনও except ...:ব্লকের ভিতরে এটি করার সময় এটি স্বয়ংক্রিয়ভাবে বর্তমান ব্যতিক্রম ব্যবহার করবে। আরও তথ্যের জন্য http://docs.python.org/library/traceback.html দেখুন ।


10
আপনি যদি জেথনের মতো কোনও ধরণের কন্টেইনারের ভিতরে কাজ করছেন এবং সুতরাং কেবল ট্রেসটি মুদ্রণ করতে না পারেন তবে format_excতার পরিবর্তে স্ট্রিং পেতে পারেন ।
সেলডমনিডি

116

এছাড়াও আছে logging.exception

import logging

...

try:
    g()
except Exception as ex:
    logging.exception("Something awful happened!")
    # will print this message followed by traceback

আউটপুট:

ERROR 2007-09-18 23:30:19,913 error 1294 Something awful happened!
Traceback (most recent call last):
  File "b.py", line 22, in f
    g()
  File "b.py", line 14, in g
    1/0
ZeroDivisionError: integer division or modulo by zero

( Http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ এর মাধ্যমে সম্পূর্ণ ট্রেসব্যাক কীভাবে প্রিন্ট করা যায় তার প্রোগ্রামটি থামছে? )


এই বনামের সুবিধা / অসুবিধাগুলি কী কী traceback.print_exc()?
নাথান

18

ই.প্রিন্টস্ট্যাকট্রেস পাইথনের সমতুল্য

জাভাতে, এটি নিম্নলিখিত ( ডক্স ) করে:

public void printStackTrace()

স্ট্যান্ডার্ড ত্রুটি প্রবাহে এই নিক্ষেপযোগ্য এবং এর ব্যাকট্রেস মুদ্রণ করে ...

এটি এভাবে ব্যবহার করা হয়:

try
{ 
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}

জাভাতে, স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি অসমাপ্ত হয় যাতে আউটপুটটি তত্ক্ষণাত উপস্থিত হয়।

পাইথন 2-তে একই শব্দার্থক শব্দগুলি হ'ল:

import traceback
import sys
try: # code that may raise an error
    pass 
except IOError as e: # exception handling
    # in Python 2, stderr is also unbuffered
    print >> sys.stderr, traceback.format_exc()
    # in Python 2, you can also from __future__ import print_function
    print(traceback.format_exc(), file=sys.stderr)
    # or as the top answer here demonstrates, use:
    traceback.print_exc()
    # which also uses stderr.

পাইথন ঘ

পাইথন 3 এ, আমরা সরাসরি ব্যতিক্রম বস্তু (যা সম্ভবত থ্রেড কোডের জন্য আরও ভাল আচরণ করে) থেকে ট্রেসব্যাক পেতে পারি। এছাড়াও, স্ট্ডার লাইন-বাফারড , তবে মুদ্রণ ফাংশনটি ফ্লাশ যুক্তি পায়, তাই এটি অবিলম্বে স্ট্যাডারে মুদ্রিত হবে:

    print(traceback.format_exception(None, # <- type(e) by docs, but ignored 
                                     e, e.__traceback__),
          file=sys.stderr, flush=True)

উপসংহার:

পাইথন 3-তে, traceback.print_exc()যদিও এটি sys.stderr ডিফল্টরূপে ব্যবহার করে তবে আউটপুটটি বাফার হয়ে যায় এবং আপনি সম্ভবত এটি হারাতে পারেন। তাই পাইথন 3, যতটা সম্ভব সমতুল্য শব্দার্থবিদ্যা যেমন পেতে, ব্যবহার printসঙ্গে flush=True


3

অন্যান্য মহান উত্তর যোগ করা হচ্ছে, আমরা পাইথন ব্যবহার করতে পারেন loggingলাইব্রেরির debug(), info(), warning(), error(), এবং critical()পদ্ধতি। পাইথন ৩.7.৪ এর জন্য ডক্স থেকে উদ্ধৃতি দেওয়া ,

কাওয়ার্গসে তিনটি কীওয়ার্ড আর্গুমেন্ট রয়েছে যা পরিদর্শন করা হয়: exc_info যা, যদি এটি মিথ্যা হিসাবে মূল্যায়ন না করে, ব্যতিক্রম তথ্য লগিং বার্তায় যোগ করার কারণ ঘটায়।

এর অর্থ হ'ল, আপনি পাইথন loggingগ্রন্থাগারটি একটি debug()বা অন্য ধরণের বার্তা আউটপুট করতে ব্যবহার করতে পারেন এবং loggingলাইব্রেরিতে স্ট্যাক ট্রেসটিকে তার আউটপুটে অন্তর্ভুক্ত করা হবে। এটি মাথায় রেখে আমরা নিম্নলিখিতগুলি করতে পারি:

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

def f():
    a = { 'foo': None }
    # the following line will raise KeyError
    b = a['bar']

def g():
    f()

try:
    g()
except Exception as e:
    logger.error(str(e), exc_info=True)

এবং এটি আউটপুট হবে:

'bar'
Traceback (most recent call last):
  File "<ipython-input-2-8ae09e08766b>", line 18, in <module>
    g()
  File "<ipython-input-2-8ae09e08766b>", line 14, in g
    f()
  File "<ipython-input-2-8ae09e08766b>", line 10, in f
    b = a['bar']
KeyError: 'bar'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.