python - ধরল - বোবায় ধরার প্রতিকার




কোন ব্যতিক্রম ধরা সম্পর্কে (6)

Python 3.0 এবং এর উপরে বিশেষ করে এটি করার একাধিক উপায় রয়েছে

পদ্ধতি 1

এটি সহজ পদ্ধতির তবে সুপারিশ করা হয় না কারণ আপনি কোডটি কোন লাইনটি আসলে ব্যতিক্রমটি নিক্ষেপ করছেন তা সঠিকভাবে জানাবেন না:

def bad_method():
    try:
        sqrt = 0**-1
    except Exception as e:
        print(e)

bad_method()

পদ্ধতি 2

এই পদ্ধতির সুপারিশ করা হয় কারণ এটি প্রতিটি ব্যতিক্রম সম্পর্কে আরও বিস্তারিত জানায়। এটা অন্তর্ভুক্ত:

  • আপনার কোড জন্য লাইন নম্বর
  • ফাইল নাম
  • আরো verbose উপায় প্রকৃত ত্রুটি

ট্র্যাকব্যাক আমদানি করা প্রয়োজন শুধুমাত্র ত্রুটি।

import traceback

def bad_method():
    try:
        sqrt = 0**-1
    except Exception:
        print(traceback.print_exc())

bad_method()

কিভাবে আমি সব ব্যতিক্রম ধরা যে ব্লক except try / লিখতে পারেন?


আপনি কিন্তু আপনি সম্ভবত না করতে পারেন:

try:
    do_something()
except:
    print "Caught it!"

যাইহোক, এটি KeyboardInterrupt ইন্টারন্টারের মত ব্যতিক্রমগুলিও ধরবে এবং আপনি সাধারণত এটি করতে চান না, তাই না? যতক্ষণ না আপনি ব্যতিক্রমটি পুনঃ-উত্থাপন করবেন - ডক্স থেকে নিম্নলিখিত উদাহরণটি দেখুন:

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
    print "Could not convert data to an integer."
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise

খুব সহজ উদাহরণ, এখানে পাওয়া একের অনুরূপ:

http://docs.python.org/tutorial/errors.html#defining-clean-up-actions

যদি আপনি সমস্ত ব্যতিক্রম ধরার চেষ্টা করছেন, তবে "চেষ্টা করুন" বিবৃতির মধ্যে আপনার সমস্ত কোডটি 'মুদ্রণ করুন' অবস্থানে রাখুন, এমন একটি ক্রিয়া সম্পাদন যা ব্যতিক্রম ছাড়িয়ে যেতে পারে। ''।

try:
    print "Performing an action which may throw an exception."
except Exception, error:
    print "An exception was thrown!"
    print str(error)
else:
    print "Everything looks great!"
finally:
    print "Finally is called directly after executing the try statement whether an exception is thrown or not."

উপরের উদাহরণে, আপনি এই ক্রম অনুসারে আউটপুট দেখতে পাবেন:

1) একটি ব্যতিক্রম সঞ্চালন যা একটি ব্যতিক্রম সঞ্চালন।

2) অবশেষে চেষ্টা বিবৃতি কার্যকর করার পরে সরাসরি বলা হয় যে কোন ব্যতিক্রম নিক্ষেপ করা হয় কিনা।

3) "একটি ব্যতিক্রম নিক্ষিপ্ত হয়!" অথবা "সবকিছু দুর্দান্ত দেখায়!" একটি ব্যতিক্রম নিক্ষিপ্ত হয় কিনা উপর নির্ভর করে।

আশাকরি এটা সাহায্য করবে!


পাইথন 2.7 এ ব্যতিক্রম নামগুলি পরীক্ষা করার জন্য আমি এই ছোট্ট কৌশলটি খুঁজে পেয়েছি। কখনও কখনও আমি কোডে নির্দিষ্ট ব্যতিক্রমগুলি পরিচালনা করেছি, তাই হ্যান্ডেল ব্যতিক্রমগুলির তালিকার মধ্যে কিনা তা দেখতে আমার একটি পরীক্ষা দরকার।

try:
    raise IndexError #as test error
except Exception as e:
    excepName = type(e).__name__ # returns the name of the exception

except: ধারা (যা অন্যরা বলেছে যে আপনি ব্যবহার করতে পারবেন না), আপনি কেবল Exception ধরতে পারেন:

import traceback
import logging

try:
    whatever()
except Exception as e:
    logging.error(traceback.format_exc())
    # Logs the error appropriately. 

আপনি সাধারণত আপনার কোডের বাইরেরতম স্তরের এই কাজটিকে একবার বিবেচনা করবেন যদি উদাহরণস্বরূপ আপনি বাতিল করার আগে অন্য কোনও অসতর্ক ব্যতিক্রমগুলি পরিচালনা করতে চান।

SystemExit except Exception অন্যতম except Exception হল যে এটি কিছুটা ব্যতিক্রম নয় যা বেশিরভাগ ক্ষেত্রেই KeyboardInterrupt SystemExit এবং SystemExit : যদি আপনি ধরা এবং গ্রাস করেন তবে আপনার স্ক্রিপ্ট থেকে যে কেউ বেরিয়ে যেতে পারে তা কঠিন করে তুলতে পারে।


try:
    whatever()
except:
    # this will catch any exception or error

এটি উল্লেখযোগ্য যে পাইথন কোডিং সঠিক নয়। এটি আপনাকে ধরতেও পারে না এমন অনেকগুলি ত্রুটিও ধরবে।





exception-handling