বন্ধন ছাড়াই "উত্থাপন ব্যতিক্রম ()" এবং "ব্যতিক্রম উত্থাপন" এর মধ্যে কি পার্থক্য রয়েছে?


100

একটি প্যারামিটারলেস ব্যতিক্রম সংজ্ঞা:

class MyException(Exception):
    pass

উত্থাপিত হলে, এর মধ্যে কোনও পার্থক্য রয়েছে:

raise MyException

এবং

raise MyException()

আমি কিছুই খুঁজে পেলাম না; এটি কি কেবল একটি ওভারলোডেড সিনট্যাক্স?


4
: এই উত্তর পড়ুন stackoverflow.com/questions/13052991/...
satoru

4
কড়া কথায় বলতে গেলে এটি সিনট্যাকটিক নয়। পাইথন এটি জানতে পারে না যে এটি রানটাইম অবধি ক্লাস বা কোনও উদাহরণ পাবে।
asmeurer

উত্তর:


116

সংক্ষিপ্ত উত্তরটি হ'ল উভয় raise MyExceptionএবং raise MyException()একই জিনিস। এই প্রথম ফর্মটি স্বয়ংক্রিয়ভাবে আপনার ব্যতিক্রমকে তাত্ক্ষণিক করে তোলে।

ডক্স থেকে প্রাসঙ্গিক অধ্যায় বলে, " বাড়াতে ব্যতিক্রম অবজেক্ট হিসেবে প্রথম অভিব্যক্তি মূল্যায়ন করে। এটি হয় একটি উপশ্রেণী বা BaseException একটি দৃষ্টান্ত হতে হবে। যদি একটি বর্গ হয়, ব্যতিক্রম দৃষ্টান্ত যখন সঙ্গে বর্গ শুরু করতে গিয়ে প্রয়োজনীয় প্রাপ্ত করা হবে কোন যুক্তি নেই। "

এটি বলেছিল, যদিও শব্দার্থকগুলি একই, প্রথম রূপটি মাইক্রোস্কোপিকভাবে দ্রুত, এবং দ্বিতীয় রূপটি আরও নমনীয় (কারণ আপনি প্রয়োজনে এটি যুক্তিগুলি পাস করতে পারেন)।

raise MyExceptionযখন আর্গুমেন্ট না থাকে তখন বেশিরভাগ লোক পাইথনে সাধারণত স্টাইলটি ব্যবহার করে (যেমন স্ট্যান্ডার্ড লাইব্রেরিতে, জনপ্রিয় অ্যাপ্লিকেশনগুলিতে এবং অনেক বইয়ে) use লোকেরা কেবল তখনই ব্যতিক্রমটি তাত্ক্ষণিকভাবে গ্রহণ করে যখন কিছু যুক্তি পাস করার প্রয়োজন হয়। উদাহরণস্বরূপ: raise KeyError(badkey)


19
কেন প্রথম রূপটি (প্রথম বন্ধনী ছাড়াই) অণুবীক্ষণিকভাবে দ্রুত হবে?
জেমসডলিন

16
@ জেমসডলিন কারণ স্বয়ংক্রিয়-ইনস্ট্যান্ট করার জন্য সি কোডটির নিজের দ্বারা কল করা থেকে আসা তাত্পর্যপূর্ণ ওভারহেড নেই।
রেমন্ড হেটেঞ্জার

4

বিবৃতিটির জন্য দস্তাবেজগুলিraise দেখুন । এটি একটি উদাহরণ তৈরি করছে MyException


4
এটি লক্ষণীয় যে ,raise পাইথন 3-এর জন্য সিনট্যাক্সটি কিছুটা পরিবর্তিত হয়েছে this এই প্রশ্নের সাথে প্রাসঙ্গিক অংশটি যদিও একই ( raise ExceptionTypeএখনও কোনও বিন্যাস ছাড়াই এর নির্মাণকারীকে কল করে টাইপের একটি উদাহরণ তৈরি করে)।
ব্ল্যাকঙ্কহট

0

হ্যাঁ, ValueErrorএবং এর মধ্যে পার্থক্য রয়েছেValueError()

ValueErrorএমন একটি শ্রেণি যেখানে শ্রেণীর ValueError()উদাহরণ তৈরি হয়। এই কারণ type(ValueError) is typeএবংtype(ValueError()) is ValueError

এর একমাত্র উদ্দেশ্য raiseব্যতিক্রম উত্থাপন,

যখন আমরা ব্যবহার করব ValueError, তখন ক্লাস বলা হবে যা পরিবর্তকটি চালককে চালায় ValueError()

যখন আমরা ব্যবহার করি ValueError(), তখন পদ্ধতিটি ValueError()সরাসরি বলা হয়।

বিঃদ্রঃ: raise ValueError # shorthand for 'raise ValueError()'

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