পাইথন চেষ্টা করুন ... কমা বনাম 'হিসাবে' ব্যতীত ছাড়া


246

বিবৃতি ব্যতীত ',' এবং 'হিসাবে' এর মধ্যে পার্থক্য কী, উদাহরণস্বরূপ:

try:
    pass
except Exception, exception:
    pass

এবং:

try:
    pass
except Exception as exception:
    pass

দ্বিতীয় সিনট্যাক্সটি 2.6-এ বৈধ? এটি উইন্ডোজে সিপিথন ২.6 এ কাজ করে তবে সাইগউইনের ২.৫ দোভাষী এটি অবৈধ বলে অভিযোগ করেন।

যদি তারা উভয়ই ২.6-তে বৈধ হয় তবে আমার কোনটি ব্যবহার করা উচিত?

উত্তর:


284

চূড়ান্ত নথিটি পিইপি -3110: ব্যতিক্রম ধরা

সারসংক্ষেপ:

  • পাইথন 3.x ইন ব্যবহার asকরা হয় প্রয়োজনীয় একটি পরিবর্তনশীল একটি ব্যতিক্রম দায়িত্ব অর্পণ করা।
  • পাইথন ২.6++ তে asসিনট্যাক্সটি ব্যবহার করুন , যেহেতু এটি পাইথন ৩.x এর সাথে সামঞ্জস্যপূর্ণ এবং সামনের দিকে সামঞ্জস্যপূর্ণ is
  • পাইথন 2.5 এবং এর আগেরটিতে, কমা সংস্করণ ব্যবহার করুন, যেহেতু asসমর্থিত নয়।

16
asপাইথন ৩.x এর স্থানীয় কোনও ক্ষেত্রে ব্যতিক্রম নির্ধারণের একমাত্র উপায় ব্যবহার তবে প্রয়োজনীয়as নয় , যেহেতু আপনার যদি এটির প্রয়োজন না হয় তবে আপনাকে এটি নির্দিষ্ট করতে হবে না।
মার্টারে

38

হ্যাঁ এটি আইনী আমি পাইথন ২.6 চালাচ্ছি

try:
    [] + 3
except Exception as x:
    print "woo hoo"

>>> 
woo hoo

আপডেট : asসিনট্যাক্স ব্যবহারের আরও একটি কারণ রয়েছে । ব্যবহারগুলি ,জিনিসগুলিকে অনেক বেশি দুষ্প্রাপ্য করে তোলে, যেমন অন্যরা দেখিয়েছে; এবং এখানে কি পার্থক্য করে। পাইথন ২.6 হিসাবে, এমন একটি উপাদান রয়েছে multicatchযা আপনাকে একটি exceptব্লকে একাধিক ব্যতিক্রম ধরতে দেয় । এ জাতীয় পরিস্থিতিতে এটি বলতে গেলে আরও অভিব্যক্তিপূর্ণ এবং পাইথোনিক

except (exception1, exception2) as e

বরং বলার চেয়ে

except (exception1, exception2), e

যা এখনও কাজ করবে


13
২.6 এর আগে পাইথন সংস্করণ আপনাকে একাধিক ব্যতিক্রমের ধরণ ধরতে একটি টুপল ব্যবহারের অনুমতি দেয়। কিন্তু বাক্য গঠনটি বিভ্রান্তিকর ছিল; আপনি except NameError, ValueError:তখন ব্যবহার করতে চাইবেন কেন ValueErrorব্যতিক্রমটি কখনই ধরা পড়েনি। বা ব্যবহৃত except (NameError, e):এবং একটি NameErrorজন্য বাকি ছিল 'e'!
মার্টিজন পিটারস

17

"হিসাবে" সিনট্যাক্সটি অগ্রাধিকারপ্রাপ্ত যা এগিয়ে যাওয়া হয়, তবে আপনার কোডটি যদি পুরানো পাইথন সংস্করণগুলির সাথে কাজ করার প্রয়োজন হয় (নতুনটিকে প্রথম সমর্থন করার জন্য 2.6 প্রথম হয়) তবে আপনাকে কমা বাক্য গঠনটি ব্যবহার করতে হবে।


9

আপনি যদি সমস্ত অজগর সংস্করণ সমর্থন করতে চান তবে আপনি sys.exc_info()এই ফাংশনটি ব্যবহার করতে পারেন :

try:
    a = 1/'0'
except (ZeroDivisionError, TypeError):
    e = sys.exc_info()[1]
    print(e.args[0])

(উত্স: http://python3porting.com/noconv.html )


2
দ্রষ্টব্য: সচেতন হওয়ার জন্য এখানে কয়েকটি কর্নার কেস রয়েছে। পাই 3-তে, asলক্ষ্যটি (বাকি ব্যতিক্রমের তথ্য সহ) ব্লকটি delপ্রস্থান করার সাথে সাথে স্পষ্টতই এডিট করা হবে except(এটি সাইক্লিক জিসি প্রায় চলমান অবধি মেমরির প্রকাশে বিলম্ব হওয়া থেকে সঞ্চিত ট্রেসব্যাকের সাথে জড়িত কিছু চক্রীয় রেফারেন্সকে বাধা দেয়) )। সুতরাং এই সমতুল্য কোডটি সামান্য কম সমতুল্য, যদি না আপনি অবরুদ্ধ হওয়ার আগে সঞ্চালিত হয় তা নিশ্চিত try/finallyকরার জন্য exceptব্লকের মধ্যে একটি ব্যবহার না del eকরে except
শ্যাডোর্যাঞ্জার 21

0

পাইথন ৩.7 হিসাবে (অন্যান্য সংস্করণ সম্পর্কে নিশ্চিত নয়) 'কমা' সিনট্যাক্সটি আর সমর্থিত নয়:

উত্স ফাইল exception_comma.py:

try:
    result = 1/0
except Exception, e:
    print("An error occurred")
    exit(1)

exit(0)
  • $ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
  • $ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
  File "exception_comma.py", line 3
    except Exception, e:
                    ^
SyntaxError: invalid syntax
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.