ফাংশন শেষ হওয়ার পূর্বে পাইথনটিতে কোনও ফাংশন (যার কোনও ফেরতের মান নেই) থেকে বেরিয়ে আসার সর্বোত্তম উপায় কী (উদাহরণস্বরূপ একটি চেক ব্যর্থ হয়)?


164

আসুন একটি পুনরাবৃত্তি ধরে নেওয়া যাক যেখানে আমরা কোনও ফিরতি মান ছাড়া কল করি value আমার প্রোগ্রামটি যেভাবে আচরণ করা উচিত তা এই সিউডোকোডে ব্যাখ্যা করা হয়েছে:

for element in some_list:
    foo(element)

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return None
    do much much more...

আমি যদি অজগরটিতে এটি প্রয়োগ করি তবে এটি আমাকে বিরক্ত করে, যে ফাংশনটি a দেয় None। "কোনও ফাংশন থেকে বেরিয়ে আসার জন্য এর আরও ভাল উপায় আছে, যার কোনও ফেরতের মান নেই, যদি কোনও ফাংশনের শরীরে কোনও চেক ব্যর্থ হয়"?


6
আপনি স্পষ্টভাবে কিছু না ফিরিয়ে দিলে পাইথন সর্বদা আর কিছুই দেয় না। তবে আপনি কেউই ছাড়তে পারবেন না।
কীথ

2
চেকটি কী তার উপর নির্ভর করে raise
আপনিও

উত্তর:


278

আপনি সহজভাবে ব্যবহার করতে পারে

return

যা ঠিক তেমনই করে does

return None

Noneকোনও returnবিবৃতি আঘাত না দিয়ে কার্যকর করা ফাংশন বডিটির শেষ প্রান্তে পৌঁছলে আপনার ফাংশনটিও ফিরে আসবে । কিছুই ফিরিয়ে দেওয়া Noneপাইথনে ফিরে আসার মতো নয় ।


returnকাজ করে না, যদি আমি সেট করি a = method(), অভ্যন্তরীন পদ্ধতিটি আমি ব্যবহার returnকরি তবে এটি একটি এর পিছনে কোড চালিয়ে যায়। প্রস্থান পিএইচপি প্রস্থান () এর মতো হওয়া উচিত, এটি তাত্ক্ষণিকভাবে প্রোগ্রামটি ভেঙে দেয়।
টমসওয়ার 18

2
@TomSawyer একটি পাইথন প্রোগ্রাম গোড়ার দিকে বন্ধ করার কি import sysপ্রথম এবং তারপর sys.exit()যদি তোমরা প্রতিবেদন সাফল্য বা থেকে প্রস্থান করতে চান sys.exit("some error message to print to stderr")
বরিস

@ বরিস, এটিই আমি খুঁজছিলাম এবং এটি আমার পক্ষে কাজ করেছিল।
মাইকি

17

আমি সুপারিশ করবে:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...

13

returnকোনও ফাংশন থেকে বেরিয়ে যাওয়ার জন্য আপনি কোনও পরামিতি ছাড়াই বিবৃতিটি ব্যবহার করতে পারেন

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return
    do much much more...

বা আপনি যদি সমস্যাটি সম্পর্কে অবহিত হতে চান তবে একটি ব্যতিক্রম বাড়াতে পারেন

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        raise Exception("cause of the problem")
    do much much more...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.