পাইথন স্ক্রিপ্টটি কীভাবে শেষ করা যায়


1074

আমি die()পিএইচপি- র কমান্ড সম্পর্কে সচেতন যা একটি স্ক্রিপ্টের প্রথম দিকে বেরিয়ে আসে।

পাইথনে আমি কীভাবে এটি করতে পারি?

উত্তর:


1412
import sys
sys.exit()

sysমডিউল ডকুমেন্টেশন থেকে বিবরণ :

sys.exit([arg])

পাইথন থেকে প্রস্থান করুন। এটি SystemExitব্যতিক্রম উত্থাপনের মাধ্যমে প্রয়োগ করা হয় , সুতরাং পরিশেষে tryবিবৃতিগুলির ধারাগুলি দ্বারা নির্ধারিত ক্লিনআপ ক্রিয়াকলাপগুলি সম্মানিত হয় এবং বাইরের স্তরে প্রস্থান প্রয়াসকে থামানো সম্ভব।

Argumentচ্ছিক আর্গুমেন্টটি আর্গুমেন্টটি প্রস্থান স্থিতি (শূন্যকে ডিফল্ট করা) বা অন্য ধরণের অবজেক্ট প্রদান করতে পারে ger যদি এটি একটি পূর্ণসংখ্যা হয় তবে শূন্যটিকে "সফল সমাপ্তি" হিসাবে বিবেচনা করা হয় এবং কোনও ননজারো মান শাঁস এবং এর মতো দ্বারা "অস্বাভাবিক সমাপ্তি" হিসাবে বিবেচিত হয়। বেশিরভাগ সিস্টেমে এটি 0-127 এর মধ্যে থাকতে হয় এবং অন্যথায় অপরিজ্ঞাত ফলাফল দেয়। কিছু প্রস্থানের নির্দিষ্ট প্রস্থান কোডগুলিতে নির্দিষ্ট অর্থ নির্ধারণের জন্য একটি সম্মেলন থাকে তবে এগুলি সাধারণত অনুন্নত হয়; ইউনিক্স প্রোগ্রামগুলি সাধারণত কমান্ড লাইন সিনট্যাক্স ত্রুটির জন্য 2 এবং অন্যান্য সমস্ত ধরণের ত্রুটির জন্য 1 ব্যবহার করে। যদি অন্য ধরণের অবজেক্টটি পাস হয়ে যায় তবে কোনওটি শূন্য পাসের সমতুল্য নয় এবং অন্য কোনও বস্তু মুদ্রিত হয় stderrএবং ফলাফলটি 1 এর প্রস্থান কোডে আসে বিশেষত, sys.exit("some error message") কোনও ত্রুটি দেখা দিলে একটি প্রোগ্রাম থেকে বেরিয়ে আসার দ্রুত উপায়।

যেহেতু exit()শেষ পর্যন্ত "কেবল" ব্যতিক্রম উত্থাপন করে, মূল থ্রেড থেকে ডাকা হলে এটি কেবল প্রক্রিয়া থেকে বেরিয়ে আসবে, এবং ব্যতিক্রমটি বাধা দেওয়া হয়নি।

মনে রাখবেন এটি প্রস্থান করার 'দুর্দান্ত' উপায়। @ glyphtwistedmatrix নীচে উল্লেখ করেছে যে আপনি যদি 'হার্ড প্রস্থান' চান তবে আপনি ব্যবহার করতে পারবেন os._exit(*errorcode*)যদিও এটি সম্ভবত কিছুটা পরিমাণে নির্দিষ্ট (উদাহরণস্বরূপ এটি উইন্ডোজের নীচে একটি ত্রুটি কোড নাও নিতে পারে), এবং এটি অবশ্যই কম বন্ধুত্বপূর্ণ কারণ এটি প্রক্রিয়াটি মারা যাওয়ার আগে দোভাষীকে কোনও ক্লিনআপ করতে দেয় না।


9
সম্ভবত sys.exit()ব্যাকগ্রাউন্ড থ্রেড দ্বারা উত্থাপিত হলে কাজ করে না (প্রক্রিয়াটি হত্যা করে না, কেবল থ্রেডটি মেরে ফেলেছে)?

@ সিজিয়াম 62: হ্যাঁ, বর্তমান থ্রেডে sys.exit()একটি SystemExitব্যতিক্রম উত্থাপন ।
দিমিত্রি ট্রফিমভ

13
কোনও ব্যতিক্রম না বাড়িয়ে কোনও স্ক্রিপ্ট শেষ করার কোনও উপায় আছে কি? আমি ইতিমধ্যে স্ক্রিপ্টের বাইরে প্রিন্ট সহ পপেনের স্টাইপুট পাইপগুলিতে প্রাসঙ্গিক পতাকাগুলি প্রেরণ করছি, সুতরাং এই ক্ষেত্রে ব্যতিক্রম এটি সমাধানের চেয়ে আরও বেশি সমস্যার সৃষ্টি করছে।
এলিয়ট

4
কেন, যখন আমি এই পদ্ধতিটি ব্যবহার করি আমি নীচের সতর্কতা পাই:UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
বিল

1
আরও বিশদ প্রয়োজন; হতে পারে যে এটি তার নিজস্ব প্রশ্ন হতে প্রাপ্য?
pjz

348

পাইথন স্ক্রিপ্টটি প্রারম্ভিক করার একটি সহজ উপায় অন্তর্নির্মিত quit()ফাংশনটি ব্যবহার করা। কোনও লাইব্রেরি আমদানি করার দরকার নেই, এবং এটি দক্ষ এবং সহজ।

উদাহরণ:

#do stuff
if this == that:
  quit()

86
এছাড়াও sys.exit () সমস্ত অজগর স্ক্রিপ্টগুলি শেষ করে দেবে, তবে প্রস্থান () কেবল এটিই তৈরি করা স্ক্রিপ্টটি বন্ধ করে দেয়।
বিশালদেবগিরে

4
আপনি কি জানেন যে এই কমান্ডটি পাইথন 2 এবং পাইথন 3 তে আলাদাভাবে কাজ করে?
ডেভিড সি

1
কেউ কি জানেন যে এটি পুরো দোভাষী থেকে প্রস্থান করবে, বা কেবল স্ক্রিপ্টটি কার্যকর করা বন্ধ করবে? স্পিফিকালি: স্পাইডারে স্ক্রিপ্ট চলার জন্য পাইথন ইন্টারপ্রেটার ইন্টারেক্টিভ থেকে যায়, নাকি এটি মারা যাবে? স্ক্রিপ্টটি চালিয়ে যাওয়া থেকে কেবল থামানোর চেষ্টা করুন, তবে দোভাষীর ইন্টারঅ্যাক্টিভিটি উপস্থিত রাখুন।
ডেমিস

3
আমার জন্য এটি বলে যে 'ছাড়ুন' সংজ্ঞায়িত হয়নি। আমি পাইথন 3 ব্যবহার করছি
ভিন্সনজুও

4
আমি অজগর 3..7 এ আছি এবং () দোভাষী বন্ধ করে স্ক্রিপ্টটি বন্ধ করে দিচ্ছি।
রকএন্ডরোলকোডার 15'19

120

আরেকটি উপায় হ'ল:

raise SystemExit

35
@ অ্যালাসা: এটি আরও মার্জিত দেখাচ্ছে, তবে এটি প্রস্তাবিত নয়: আপনি পছন্দসই (এবং ওভাররাইটেবল) sys.exitমোড়কের পরিবর্তে সরাসরি বিল্টিন ব্যতিক্রম উত্থাপন করছেন
মাস্ট্রেলিয়ন

1
এটি আমার জন্য একটি নিখুঁত উপায়: কেবল চলমান স্ক্রিপ্টটি ছেড়ে দিন তবে
আইডিএল

77

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

মনে রাখবেন যে sys.exit(), exit(), quit(), এবং os._exit(0) বধ পাইথন ইন্টারপ্রেটার। সুতরাং, যদি এটির দ্বারা অন্য স্ক্রিপ্ট থেকে ডাকা স্ক্রিপ্টে উপস্থিত হয়, তবে এটি execfile()উভয় স্ক্রিপ্টের সম্পাদন বন্ধ করে দেয়।

এটি এড়াতে " এক্সিকিফাইলে ডাকা স্ক্রিপ্টটির কার্যকরকরণ বন্ধ করুন " দেখুন ।


67

যদিও আপনার সাধারণত পছন্দ করা উচিত sys.exitকারণ এটি অন্যান্য কোডের সাথে আরও "বন্ধুত্বপূর্ণ", তবে এটি আসলে একটি ব্যতিক্রম বাড়িয়ে তোলে।

যদি আপনি নিশ্চিত হন যে আপনাকে অবিলম্বে কোনও প্রক্রিয়া থেকে বেরিয়ে আসতে হবে এবং আপনি কিছু ব্যতিক্রম হ্যান্ডলারের অভ্যন্তরে থাকতে পারেন যা ধরতে পারে SystemExit, তবে অন্য একটি ফাংশন রয়েছে os._exit- যা সি স্তরে অবিলম্বে বন্ধ হয়ে যায় এবং সাধারণ টিয়ার-ডাউন কোনও সম্পাদন করে না দোভাষী উদাহরণস্বরূপ, "অ্যাক্সিট" মডিউলটির সাথে নিবন্ধিত হুকগুলি কার্যকর করা হয় না।


43

আমি সবেমাত্র জানতে পেরেছিলাম যে মাল্টিথ্রেডেড অ্যাপ লেখার সময় raise SystemExitএবং sys.exit()উভয়ই কেবল চলমান থ্রেডটিকে হত্যা করে kill অন্যদিকে, os._exit()পুরো প্রক্রিয়াটি প্রস্থান করে। এটি আলোচিত হয়েছিল " পাইথনের কোনও থ্রেডের ভিতরে ডাকলে sys.exit () কেন প্রস্থান হয় না? "।

নীচের উদাহরণে 2 টি থ্রেড রয়েছে। কেনি এবং কার্টম্যান। কার্টম্যান চিরকালের জন্য বেঁচে থাকার কথা, তবে কেনিকে পুনরাবৃত্তভাবে বলা হয় এবং 3 সেকেন্ডের পরে মারা যেতে হবে। (পুনরাবৃত্তি কলিং সেরা উপায় নয়, তবে আমার অন্যান্য কারণও ছিল)

যদি আমরাও চাই যে কেনি মারা গেলে কার্টম্যান মারা যায়, কেনির সাথে চলে যাওয়া উচিত os._exit, অন্যথায়, কেবল কেনি মারা যাবেন এবং কার্টম্যান চিরকাল বেঁচে থাকবেন।

import threading
import time
import sys
import os

def kenny(num=0):
    if num > 3:
        # print("Kenny dies now...")
        # raise SystemExit #Kenny will die, but Cartman will live forever
        # sys.exit(1) #Same as above

        print("Kenny dies and also kills Cartman!")
        os._exit(1)
    while True:
        print("Kenny lives: {0}".format(num))
        time.sleep(1)
        num += 1
        kenny(num)

def cartman():
    i = 0
    while True:
        print("Cartman lives: {0}".format(i))
        i += 1
        time.sleep(1)

if __name__ == '__main__':
    daemon_kenny = threading.Thread(name='kenny', target=kenny)
    daemon_cartman = threading.Thread(name='cartman', target=cartman)
    daemon_kenny.setDaemon(True)
    daemon_cartman.setDaemon(True)

    daemon_kenny.start()
    daemon_cartman.start()
    daemon_kenny.join()
    daemon_cartman.join()

1
অসচ্ছলভাবে পিছিয়ে থাকা কলব্যাকগুলি মোকাবেলা করার একমাত্র উপায় বলে মনে হয়! (অর্থাত্ বহু-
থ্রেডযুক্ত

1
সাবাশ. অন্য কোনও উত্তর সরাসরি একাধিক থ্রেডকে সম্বোধন করে না, কেবল অন্যান্য স্ক্রিপ্টগুলিকে ফাঁকা করে দেওয়া স্ক্রিপ্টগুলি।
অজ্ঞাতনামা

33
from sys import exit
exit()

প্যারামিটার হিসাবে আপনি একটি প্রস্থান কোড পাস করতে পারেন, যা ওএস এ ফিরে আসবে। ডিফল্ট 0 হয়।


3
আমার ক্ষেত্রে আমার এমনকি প্রস্থানটি আমদানি করার প্রয়োজনও ছিল না।
Kostanos

4
কেবল উপরের মন্তব্যে উত্তরোত্তর জন্য - exit()এবং sys.exit()একই জিনিস নয়। অন্তর্নির্মিত exit()স্ক্রিপ্টগুলি ব্যবহার করবেন না , এটি ইন্টারেক্টিভ শেলটির জন্য কেবল সহায় - ব্যবহার করুনsys.exit()
ড্যাভরইনসওয়ারিথিং

18

আমি মোট নবাগত তবে অবশ্যই এটি ক্লিনার এবং আরও নিয়ন্ত্রিত

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

প্রোগ্রামটি সমাপ্ত

চেয়ে

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

প্রোগ্রামটি ট্রেসব্যাক শেষ করা হয়েছে (সর্বশেষতম কলটি শেষ হয়েছে): ফাইল "জেড: \ ডিরেক্টরি d টেস্টডিগ্রোগ.পি", লাইন 12, প্রধান () ফাইলের "জেড: \ ডিরেক্টরি \ টেস্টডিগ্রোগ্রাম.পি", লাইন 8, প্রধান sys.exit- এ ( ) সিস্টেমএক্সিট

সম্পাদন করা

মূল বক্তব্যটি হ'ল "আমি থামলাম !!!!" না হয়ে প্রোগ্রামটি সুষ্ঠু ও শান্তিপূর্ণভাবে শেষ হবে "


19
একটি সমস্যা হ'ল যদি আপনি নেস্টেড ফাংশনগুলিতে থাকেন এবং কেবল প্রস্থান করতে চান, আপনাকে হয় উপরের ফাংশনটিতে ফিরে সমস্ত পথ একটি পতাকা পাঠাতে হবে অথবা আপনি কেবল পরবর্তী স্তরে ফিরে যাবেন।
হর্টা

11
আপনি যদি returnস্ক্রিপ্টটি বন্ধ করতে ব্যবহার করতে পারেন এমন পরামর্শ দেওয়ার চেষ্টা করছেন তবে এটি একটি নিখুঁত বাজে কথা । সবই returnকরছে কলিং ফাংশনে একটি মান এবং নিয়ন্ত্রণের প্রবাহ ফিরিয়ে দেওয়া। সেখানে ডেকে আনা ফাংশন ডেকে ডেকে ডাকা হওয়ার পরে ঠিক মৃত্যুদণ্ড কার্যকর করা হয় return। অবশ্যই, যদি returnআপনার স্ক্রিপ্টে এটিই আপনার উদাহরণ হিসাবে শেষ বিবৃতি হয়, তবে স্ক্রিপ্টটি ডাকা হওয়ার পরে একেবারে সমাপ্ত করা হবে।
ডেভিড ফেরেঞ্জি রোগোয়ান

1
এই পদ্ধতির জন্য একটি দৃ argument় যুক্তি রয়েছে: (1) মাঝামাঝি থেকে "প্রস্থান" তাত্ক্ষণিকভাবে একটি "গোটো", তাই প্রাকৃতিক বিদ্বেষ; (২) লাইব্রেরিতে "প্রস্থান" হ'ল অবশ্যই খারাপ অভ্যাস (এবং যে কোনও কিছু গ্রন্থাগারে পরিণত হতে পারে), যেহেতু একটি গ্রন্থাগার যা "অপরিবর্তনযোগ্য" হিসাবে বিবেচনা করে তা সাধারণত আহ্বানকারীদের পক্ষে সূক্ষ্ম । (দ্রষ্টব্য: বহিরাগতদের জন্য ব্যতিক্রমগুলি ব্যবহার করা সি / সি ++ / জাভা ডেভাসের পক্ষে সবসময় অনুপযুক্ত কল করা এক অজগর ব্যবহারিক কাজ exithence সুতরাং পাইথন প্রোগ্রামাররা এই কোডের গন্ধের দুর্গন্ধকে ততটা লক্ষ্য করতে পারে না); এবং সর্বশেষে, (3) একাধিক-থ্রেড কোড (যা পাইথোনিস্টাস historতিহাসিকভাবে কেবল উপেক্ষা করেছেন)।
মাইকেল

8

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

## My example:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    print("Start codon is missing! Check your DNA sequence!")
    exit() ## as most folks said above

পরে, আমি দেখতে পেলাম যে কেবল একটি ত্রুটি ছুঁড়ে ফেলার জন্য এটি আরও সাফল্যযুক্ত:

## My example revised:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    raise ValueError("Start codon is missing! Check your DNA sequence!")

আমি পুরোপুরি সম্মত হয়েছি যে কোনও ত্রুটি যা অ্যাপ্লিকেশন দ্বারা পরিচালিত হতে পারে তার জন্য ব্যতিক্রম বাড়ানো আরও ভাল। তবে প্রশ্নটি ছিল কীভাবে পাইথন স্ক্রিপ্টটি শেষ করা যায়, সুতরাং এটি আসলে প্রশ্নের উত্তর (নতুন) নয়।
ওয়াওভানো

-1

আমার দুই সেন্ট.

পাইথন 3.8.1, উইন্ডোজ 10, 64-বিট।

sys.exit() আমার জন্য সরাসরি কাজ করে না।

আমার বেশ কয়েকটি নেক্স্টেড লুপ রয়েছে।

প্রথমে আমি একটি বুলিয়ান ভেরিয়েবল ঘোষণা করি, যা আমি কল করি immediateExit

সুতরাং, প্রোগ্রাম কোডটির শুরুতে আমি লিখি:

immediateExit = False

তারপরে, সর্বাধিক অভ্যন্তরীণ (নেস্টেড) লুপ ব্যতিক্রম থেকে শুরু করে আমি লিখছি:

            immediateExit = True
            sys.exit('CSV file corrupted 0.')

তারপরে আমি বাহ্যিক লুপের তাত্ক্ষণিক ধারাবাহিকতায় চলে যাই, এবং কোডের দ্বারা অন্য কিছু কার্যকর করার আগে আমি লিখি:

    if immediateExit:
        sys.exit('CSV file corrupted 1.')

জটিলতার উপর নির্ভর করে, কখনও কখনও উপরের বিবৃতিটি বিভাগগুলি বাদেও পুনরাবৃত্তি করা প্রয়োজন etc.

    if immediateExit:
        sys.exit('CSV file corrupted 1.5.')

কাস্টম বার্তাটি আমার ব্যক্তিগত ডিবাগিংয়ের জন্য, পাশাপাশি সংখ্যাগুলি একই উদ্দেশ্যে রয়েছে - স্ক্রিপ্টটি আসলে কোথায় উপস্থিত রয়েছে তা দেখার জন্য।

'CSV file corrupted 1.5.'

আমার বিশেষ ক্ষেত্রে আমি একটি সিএসভি ফাইল প্রক্রিয়া করছি, যা আমি সফ্টওয়্যারটি স্পর্শ করতে চাই না, যদি সফ্টওয়্যার সনাক্ত করে তবে এটি দূষিত হয়েছে। সুতরাং আমার পক্ষে সম্ভাব্য দুর্নীতি সনাক্ত করার সাথে সাথে পুরো পাইথন স্ক্রিপ্টটি ত্যাগ করার পরেও খুব গুরুত্বপূর্ণ important

এবং আমি এটি পরিচালনা করতে সমস্ত লুপ থেকে ক্রমান্বয়ে sys.exit-ing অনুসরণ করছি।

সম্পূর্ণ কোড: (কিছু পরিবর্তন প্রয়োজন ছিল কারণ এটি অভ্যন্তরীণ কাজের জন্য মালিকানাধীন কোড):

immediateExit = False
start_date = '1994.01.01'
end_date = '1994.01.04'
resumedDate = end_date


end_date_in_working_days = False
while not end_date_in_working_days:
    try:
        end_day_position = working_days.index(end_date)

        end_date_in_working_days = True
    except ValueError: # try statement from end_date in workdays check
        print(current_date_and_time())
        end_date = input('>> {} is not in the list of working days. Change the date (YYYY.MM.DD): '.format(end_date))
        print('New end date: ', end_date, '\n')
        continue


    csv_filename = 'test.csv'
    csv_headers = 'date,rate,brand\n' # not real headers, this is just for example
    try:
        with open(csv_filename, 'r') as file:
            print('***\nOld file {} found. Resuming the file by re-processing the last date lines.\nThey shall be deleted and re-processed.\n***\n'.format(csv_filename))
            last_line = file.readlines()[-1]
            start_date = last_line.split(',')[0] # assigning the start date to be the last like date.
            resumedDate = start_date

            if last_line == csv_headers:
                pass
            elif start_date not in working_days:
                print('***\n\n{} file might be corrupted. Erase or edit the file to continue.\n***'.format(csv_filename))
                immediateExit = True
                sys.exit('CSV file corrupted 0.')
            else:
                start_date = last_line.split(',')[0] # assigning the start date to be the last like date.
                print('\nLast date:', start_date)
                file.seek(0) # setting the cursor at the beginnning of the file
                lines = file.readlines() # reading the file contents into a list
                count = 0 # nr. of lines with last date
                for line in lines: #cycling through the lines of the file
                    if line.split(',')[0] == start_date: # cycle for counting the lines with last date in it.
                        count = count + 1
        if immediateExit:
            sys.exit('CSV file corrupted 1.')
        for iter in range(count): # removing the lines with last date
            lines.pop()
        print('\n{} lines removed from date: {} in {} file'.format(count, start_date, csv_filename))



        if immediateExit:
            sys.exit('CSV file corrupted 1.2.')
        with open(csv_filename, 'w') as file:
            print('\nFile', csv_filename, 'open for writing')
            file.writelines(lines)

            print('\nRemoving', count, 'lines from', csv_filename)

        fileExists = True

    except:
        if immediateExit:
            sys.exit('CSV file corrupted 1.5.')
        with open(csv_filename, 'w') as file:
            file.write(csv_headers)
            fileExists = False
    if immediateExit:
        sys.exit('CSV file corrupted 2.')

1
আপনার অবদানের জন্য ধন্যবাদ, তবে আমার কাছে এই উত্তরটি কোনও অর্থ দেয় না। যেহেতু আপনি কেবলমাত্র একটি সম্পূর্ণ উদাহরণের পরিবর্তে কয়েকটি স্নিপেট পোস্ট করেন আপনার অর্থ কী তা বোঝা শক্ত। আপনি এখানে পোস্ট করেছেন এমন কোডের লাইনগুলির সাথে সাথে স্ক্রিপ্টটি অবিলম্বে প্রস্থান করবে। আমি কেবল অনুমান করতে পারি যে আপনার একটি ট্রাই-ক্যাচ ব্লক রয়েছে, যা অন্যান্য উত্তরগুলিতে ইতিমধ্যে উল্লিখিত সিস্টেমঅ্যাক্সিট ব্যতিক্রমকে ধরে ফেলবে। আপনি কীভাবে কোনও অ্যাপ্লিকেশনকে পরিষ্কারভাবে বেরিয়ে আসবেন (যেমন কিছু প্রয়োজনীয় শাটডাউন ক্রিয়া সম্পাদন করে) এর সম্পূর্ণ কার্যকারী উদাহরণ সহ আপনি যদি নিজের উত্তরটি পুনরায় লেখেন তবে আমি মনে করি যে আপনার পোস্টটি একটি দরকারী সংযোজন হতে পারে।
ওয়াওভানো

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ। এখন আমি কোডটির অংশটি যুক্ত করেছি, যা প্রস্থান বিবৃতি নিয়ে উদ্বেগ প্রকাশ করে।
ম্যাথু

ঠিক আছে, এটি কিছুটা প্রসঙ্গ দেয় :) যদিও এখন আমি মনে করি যে আপনার সমাধানটি আসলে খুব খারাপ প্রোগ্রামিং নিদর্শনগুলির জন্য একটি পরিশ্রম। প্রথমত, আপনার কখনও except:ব্যতিক্রম প্রকার ছাড়া ব্যবহার করা উচিত নয় । আপনি যদি কেবলমাত্র ব্যবহার করেন except Exception:(বা যদি সম্ভব হয় তার চেয়ে আরও বিশদ ব্যতিক্রমের প্রকারের प्रकार), তবে sys.exit()উদ্দেশ্যটি কাজ করবে এবং আপনার এই কাজের প্রয়োজন হবে না।
ওয়াভানো 15

দ্বিতীয়ত, দেখে মনে হচ্ছে আপনি একটি পদ্ধতিতে, বা এমনকি বিশ্বব্যাপী ফাইলের স্কোপতে বেশ কয়েকটি বেশ কয়েকটি জিনিস করার চেষ্টা করেছেন। এটি আপনার কোডটিকে ছোট ছোট টুকরো (ফাংশন) এ বিভক্ত করতে সহায়তা করবে, উদাহরণস্বরূপ: (1) লোড ইনপুট ফাইল, (2) প্রক্রিয়া ডেটা এবং (3) আউটপুট ফাইল লিখুন। তারপরে যদি পদক্ষেপ 1 ব্যর্থ হয়, আপনি পদক্ষেপ 2 এবং 3 এড়িয়ে যাবেন You লোডিং পদক্ষেপের সময় আপনি যে কোনও জায়গায় ব্যতিক্রম বাড়াতে পারেন এবং আপনি ব্যতিক্রমটি এক জায়গায় পরিচালনা করতে পারেন। ব্যবহার sys.exit()করা গুরুতর ত্রুটিগুলির জন্য এক প্রকারের শেষ-রিসোর্ট সমাধানের জন্য সত্যই ব্যবহৃত হয়। শুধু আমার দুটি সেন্ট :)
ওয়াওভানো

সাধারণভাবে, আমি পাইথনে কোনও বৈশ্বিক প্রস্থান / থামানোর কার্যকারিতা দেখতে পাচ্ছি না এবং আমি এটি এইভাবে তৈরি করতে বাধ্য হই। সিএসভি ফাইলটি আমার পক্ষে সত্যই সমালোচনামূলক, সুতরাং উপায়টি কুৎসিত দেখায়, এমনকি আমি এটিকে সর্বদাই সম্ভব রক্ষা করি। আমি আমার স্টাইলটি উন্নত করার জন্য পাইথনে দ্য হিচিকারের গাইডটি পড়ছি
ম্যাথু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.