উত্তর:
পাইথন ২.6 এবং তারপরে এবং পাইথন ৩.x এর জন্য:
except Exception as e: print(e)
পাইথন 2.5 এবং এর আগেরটির জন্য, ব্যবহার করুন:
except Exception,e: print str(e)
str( KeyError('bad'))
=> 'bad'
- ব্যতিক্রম প্রকারটি বলে না
print(repr(e))
; বেস Exception.__str__
প্রয়োগটি কেবল ব্যতিক্রম বার্তা দেয়, প্রকার নয়। অথবা, traceback
মডিউলটি ব্যবহার করুন , যার বর্তমান ব্যতিক্রম মুদ্রণের জন্য পদ্ধতি রয়েছে, ফর্ম্যাট করা হয়েছে বা পুরো ট্রেসব্যাক রয়েছে।
traceback
মডিউলের জন্য পদ্ধতি উপলব্ধ বিন্যাস এবং প্রিন্টিং ব্যতিক্রম এবং তাদের tracebacks, এই যেমন ব্যতিক্রম প্রিন্ট হবে ডিফল্ট হ্যান্ডেলার পছন্দ করে:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
আউটপুট:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
error_message = traceback.format_exc()
except Exception as ex:
...
sys.exc_info()
ফাংশনের মাধ্যমে উপলব্ধ এবং traceback.print_exc()
ফাংশনটি সেখান থেকে এটি পায়। কোনও ব্যতিক্রম পরিচালনা না করার সময় বা আপনি যখন অন্য কোনও ব্যতিক্রমের ভিত্তিতে তথ্য প্রদর্শন করতে চান তখন আপনাকে কেবল কখনও ব্যতিক্রম স্পষ্টভাবে পাস করতে হবে।
ইন পাইথন 2.6 বা তার অধিক একটু ক্লিনার আছে:
except Exception as e: print(e)
পুরানো সংস্করণগুলিতে এটি এখনও বেশ পাঠযোগ্য:
except Exception, e: print e
আপনি যদি ত্রুটিযুক্ত স্ট্রিংগুলি পাস করতে চান তবে এখানে ত্রুটি এবং ব্যতিক্রমগুলির উদাহরণ রয়েছে (পাইথন ২.6)
>>> try:
... raise Exception('spam', 'eggs')
... except Exception as inst:
... print type(inst) # the exception instance
... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly
... print 'x =', x
... print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
(@ জাল্ডুপন্টের উত্তরের মন্তব্য হিসাবে আমি এটি ছেড়ে যাচ্ছি, তবে আমার যথেষ্ট খ্যাতি নেই))
আমি @ jldupont- এর উত্তর অন্যান্য জায়গাগুলিতেও দেখেছি। এফডাব্লুআইডাব্লু, আমি মনে করি এটি গুরুত্বপূর্ণ:
except Exception as e:
print(e)
ত্রুটি আউটপুটটি sys.stdout
ডিফল্টরূপে মুদ্রণ করবে । সাধারণভাবে ত্রুটি পরিচালনার জন্য আরও উপযুক্ত পন্থাটি হ'ল:
except Exception as e:
print(e, file=sys.stderr)
(মনে রাখবেন import sys
এটির কাজ করার জন্য আপনাকে অবশ্যই এটি করতে হবে This) এইভাবে ত্রুটিটি STDERR
পরিবর্তে মুদ্রণ করা হবে STDOUT
যা সঠিক আউটপুট পার্সিং / পুনঃনির্দেশ / ইত্যাদির অনুমতি দেয়। আমি বুঝতে পারি যে প্রশ্নটি 'ত্রুটি ছাপানোর' বিষয়ে কঠোরভাবে ছিল, তবে এই বিশদটি বাদ দেওয়ার চেয়ে এখানে সর্বোত্তম অনুশীলনটি চিহ্নিত করা গুরুত্বপূর্ণ বলে মনে হয় যা শেষ পর্যন্ত আরও ভাল শিখেনি এমন কারও জন্য মানসম্মত কোডের দিকে পরিচালিত করতে পারে।
আমি traceback
ক্যাট প্লাস প্লাসের উত্তরের মতো মডিউলটি ব্যবহার করি নি এবং সম্ভবত এটিই সবচেয়ে ভাল উপায় তবে আমি ভেবেছিলাম আমি এটি এখানে ফেলে দেব।
logging
বেসিক print()
ফাংশনটি ব্যবহার না করে, আরও নমনীয় logging
মডিউলটি ব্যতিক্রম লগ করতে ব্যবহার করা যেতে পারে। logging
মডিউল অফার অনেক অতিরিক্ত কার্যকারিতা, একটি প্রদত্ত লগ ফাইলে যেমন লগিং বার্তা, টাইমস্ট্যাম্প এবং প্রায় যেখানে লগিং ঘটেছে অতিরিক্ত তথ্য সমেত বার্তা লগিং। (আরও তথ্যের জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন out )
একটি ব্যতিক্রম লগ করা মডিউল স্তরের ফাংশন এর logging.exception()
মতো করে করা যেতে পারে:
import logging
try:
1/0
except BaseException:
logging.exception("An exception was thrown!")
আউটপুট:
ERROR:root:An exception was thrown!
Traceback (most recent call last):
File ".../Desktop/test.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
মন্তব্য:
ফাংশনটি logging.exception()
কেবল একটি ব্যতিক্রম হ্যান্ডলার থেকে কল করা উচিত
logging
একটি এড়ানোর জন্য মডিউলটি লগিং হ্যান্ডলারের ভিতরে ব্যবহার করা উচিত নয় RecursionError
(ধন্যবাদ @ প্রখরপাণ্ডে)
এই জাতীয় কীওয়ার্ড আর্গুমেন্ট ব্যবহার করে অন্য লগ-স্তরের সাথে ব্যতিক্রম লগ করা সম্ভব exc_info=True
:
logging.debug("An exception was thrown!", exc_info=True)
logging.info("An exception was thrown!", exc_info=True)
logging.warning("An exception was thrown!", exc_info=True)
ব্যতিক্রমগুলি ধরার সময় ট্রেসব্যাক থেকে কোন তথ্য প্রদর্শিত / লগ হওয়া উচিত তার একটিতে বেশ নিয়ন্ত্রণ থাকে।
কোড
with open("not_existing_file.txt", 'r') as text:
pass
নিম্নলিখিত ট্রেসব্যাক উত্পাদন করতে হবে:
Traceback (most recent call last):
File "exception_checks.py", line 19, in <module>
with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'
অন্যরা ইতিমধ্যে উল্লিখিত হিসাবে, আপনি ট্রেসব্যাক মডিউলটি ব্যবহার করে পুরো ট্রেসব্যাকটি ধরতে পারবেন:
import traceback
try:
with open("not_existing_file.txt", 'r') as text:
pass
except Exception as exception:
traceback.print_exc()
এটি নিম্নলিখিত আউটপুট উত্পাদন করবে:
Traceback (most recent call last):
File "exception_checks.py", line 19, in <module>
with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'
লগিং ব্যবহার করে আপনি এটি অর্জন করতে পারেন:
try:
with open("not_existing_file.txt", 'r') as text:
pass
except Exception as exception:
logger.error(exception, exc_info=True)
আউটপুট:
__main__: 2020-05-27 12:10:47-ERROR- [Errno 2] No such file or directory: 'not_existing_file.txt'
Traceback (most recent call last):
File "exception_checks.py", line 27, in <module>
with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'
আপনি পুরো ট্রেসব্যাকটিতে আগ্রহী নাও হতে পারেন, তবে কেবলমাত্র ব্যতিক্রম নাম এবং ব্যতিক্রম বার্তার মতো গুরুত্বপূর্ণ তথ্যগুলিতে:
try:
with open("not_existing_file.txt", 'r') as text:
pass
except Exception as exception:
print("Exception: {}".format(type(exception).__name__))
print("Exception message: {}".format(exception))
আউটপুট:
Exception: FileNotFoundError
Exception message: [Errno 2] No such file or directory: 'not_existing_file.txt'