উদ্দেশ্য-সি / কোকোয় একটি ব্যতিক্রম ছোঁড়া ing


উত্তর:


528

আমি [NSException raise:format:]নিম্নলিখিত হিসাবে ব্যবহার :

[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];

9
আমি @throw([NSException exceptionWith…])আরও বেশি সংক্ষিপ্ত হিসাবে পদ্ধতির কাছে প্রয়োগ হিসাবে এই উপায়ে পছন্দ করি ।
স্যাম সোফেস

9
ক্ষতিগ্রস্ত গুরুত্বপূর্ণ সতর্কীকরণ (পড়তে ভুলবেন না stackoverflow.com/questions/324284/324805#324805 )
e.James

26
আমি সাধারণত এটিকেও পছন্দ করি তবে একটি গোটা আছে। এক্সকোডের কেবল আমার বর্তমান সংস্করণ হতে পারে তবে [এনএসইসেক্সেপশন উত্থাপন ...] সিনট্যাক্সটি এমন কোনও পদ্ধতি থেকে পার্সারকে বহির্গমন পথ হিসাবে স্বীকৃত বলে মনে হয় না যা একটি মান দেয়। এই সিনট্যাক্সটি ব্যবহার করার সময় আমি "সতর্কতাটি অ-শূন্য ফাংশনের শেষের দিকে পৌঁছে যেতে পারে" সতর্কতাটি দেখছি, তবে @ থ্রো ([এনএসইসেপশন ব্যতিক্রমের সাথে…]) সিনট্যাক্সের সাহায্যে, পার্সারটি প্রস্থান হিসাবে স্বীকৃত হয়েছে এবং সতর্কতাটি প্রদর্শন করে না।
mattorb

1
@ এমপিএসএক্স আপনি যে কারণে দিয়েছেন তার জন্য আমি সর্বদা নিক্ষেপ বাক্য গঠনটি ব্যবহার করি (যা এখনও দুই বছর পরে এক্সকোড ৪.6-এ প্রাসঙ্গিক এবং সম্ভবত সর্বদা থাকবে)। আইডিই স্বীকৃতি জানানো হয়েছে যে আপনি কোনও সতর্কতা এড়াতে চাইলে একটি ব্যতিক্রম নিক্ষেপ করা একটি ফাংশন থেকে বেরিয়ে আসা পয়েন্ট frequently
মার্ক আমেরিকা

এফডাব্লুআইডাব্লু আমি লক্ষ্য করছি যে @ ট্রাই / @ ক্যাপ ব্লকগুলি "অকার্যকর ক্রিয়াকলাপের শেষে পৌঁছায়" সতর্কতাগুলির (যেমন সতর্কতাটি যখন হওয়া উচিত তখন প্রকাশিত হয় না) ফলস্বরূপ একটি মিথ্যা-নেতিবাচক
ফলাফলও দেয়

256

এখানে সতর্কতার একটি শব্দ। উদ্দেশ্য-সি-তে, অনেকগুলি অনুরূপ ভাষার মতো নয়, সাধারণ ক্রিয়াকলাপের ক্ষেত্রে সাধারণ অপারেশনের ক্ষেত্রে ব্যতিক্রমগুলি ব্যবহার করা এড়াতে আপনার সাধারণত চেষ্টা করা উচিত।

ওবজে-সি ২.০ এর জন্য অ্যাপলের ডকুমেন্টেশনটি নিম্নলিখিতটি জানিয়েছে: "গুরুত্বপূর্ণ: ব্যতিক্রমগুলি উদ্দেশ্য-সিতে সংস্থান-নিবিড়।

অ্যাপলের ধারণাগত ব্যতিক্রমী হ্যান্ডলিং ডকুমেন্টেশন একই ব্যাখ্যা করে, তবে আরও শব্দের সাথে: "গুরুত্বপূর্ণ: আপনার প্রোগ্রামিং বা অপ্রত্যাশিত রানটাইম ত্রুটি যেমন সীমানা সংগ্রহের অ্যাক্সেস, অপরিবর্তনীয় অবজেক্টগুলিকে পরিবর্তন করার চেষ্টা, একটি অবৈধ বার্তা প্রেরণের ব্যতিক্রমগুলি ব্যবহার সংরক্ষণ করা উচিত , এবং উইন্ডো সার্ভারের সাথে সংযোগ হারাতে হবে: রানটাইমের পরিবর্তে কোনও অ্যাপ্লিকেশন তৈরি হওয়ার সময় আপনি সাধারণত ব্যতিক্রমগুলি সহ এই ধরণের ত্রুটিগুলির যত্ন নেন [[.....] ব্যতিক্রমগুলির পরিবর্তে ত্রুটিযুক্ত বস্তু (এনএসইরর) এবং কোকো ত্রুটি-বিতরণ প্রক্রিয়া হ'ল কোকো অ্যাপ্লিকেশনগুলিতে প্রত্যাশিত ত্রুটিগুলি যোগাযোগ করার প্রস্তাবিত উপায় ""

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


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

6
আরও গুরুত্বপূর্ণ, কোকো ব্যতিক্রমগুলি পুনরুদ্ধারযোগ্য প্রোগ্রামের ত্রুটিগুলি নির্দেশ করার জন্য তৈরি করা হয়েছে। অন্যথায় করা ফ্রেমওয়ার্কের বিপরীতে চলছে এবং অপরিবর্তিত আচরণ হতে পারে। বিস্তারিত জানার জন্য stackoverflow.com/questions/3378696/iphone-try-end-try/… দেখুন ।
কেপিএম

9
"একইটি জাভাতে প্রযোজ্য;" একমত নন। আপনি স্বাভাবিক ত্রুটির অবস্থার জন্য জাভাতে চেক করা ব্যতিক্রমগুলি কেবল সূক্ষ্ম ব্যবহার করতে পারেন। অবশ্যই আপনি রানটাইম ব্যতিক্রমগুলি ব্যবহার করবেন না।
ড্যানিয়েল রায়ান

আমি কোকো পথটিকেই পছন্দ করি (ব্যতিক্রমগুলি কেবলমাত্র প্রোগ্রামার ত্রুটির জন্য) তবে এটি আমি জাভাতেও করতে পছন্দ করবো তবে বাস্তবতা হ'ল আপনার পরিবেশে সাধারণ অনুশীলনগুলি সহ চলতে হবে এবং ত্রুটি সামলাতে ব্যর্থতার মতো লাঠিগুলি বাদ দেওয়া উচিত a অবজেক্টিভ-সি তে দুর্গন্ধযুক্ত তবে জাভাতে সে লক্ষ্যে প্রচুর ব্যবহৃত হয়।
gnasher729

1
এই মন্তব্য প্রশ্নের উত্তর দেয় না। ক্র্যাশ রিপোর্টের কাঠামোটি প্রত্যাশার মতো কাজ করছে কিনা তা পরীক্ষা করতে পারে ওপি কেবল অ্যাপটিকে ক্র্যাশ করতে চায়।
সাইমন

62
@throw([NSException exceptionWith…])

এক্সকোড @throwবিবৃতিগুলির মতো ফাংশন থেকে বেরিয়ে যাওয়ার পয়েন্ট হিসাবে স্বীকৃতি দেয় return@throwসিনট্যাক্সটি ব্যবহার করা ভুল হওয়া থেকে বিরত থাকে " কন্ট্রোলটি অ-শূন্য ফাংশনের শেষের দিকে পৌঁছতে পারে " যে সতর্কতাগুলি থেকে আপনি পেতে পারেন [NSException raise:…]

এছাড়াও, @throwক্লাস এনএসইেক্সসেপশন নয় এমন জিনিসগুলি নিক্ষেপ করতে ব্যবহার করা যেতে পারে।


11
@ স্টিফ থিরিওন: সমস্ত বিবরণের জন্য বিকাশকারী.অ্যাপল. com/ ডকুমেন্টেশন / কোকো / কনসেপ্টুয়াল / এক্সেকশনস / দেখুন দেখুন । শেষের সারি? উভয়ই কাজ করবে তবে @ থ্রো এমন জিনিসগুলি এনএসএক্সেপশন শ্রেণীর নয় এমন জিনিসগুলিকে ছুঁড়ে ফেলার জন্য ব্যবহার করা যেতে পারে।
জেমস 21

33

সম্পর্কিত [NSException raise:format:]। জাভা ব্যাকগ্রাউন্ড থেকে আগতদের জন্য, আপনি স্মরণ করতে পারবেন যে জাভা ব্যতিক্রম এবং রানটাইম এক্সেপশন মধ্যে পার্থক্য করে। ব্যতিক্রম একটি চেক করা ব্যতিক্রম এবং রানটাইম এক্সেপশন চেক করা হয়নি। বিশেষত, "প্রোগ্রামার ত্রুটির কারণে রানটাইম ত্রুটি" এর জন্য জাভা "স্বাভাবিক ত্রুটি অবস্থার" জন্য চেক করা ব্যতিক্রম এবং চেক করা ব্যতিক্রমগুলি ব্যবহার করার পরামর্শ দেয়। দেখে মনে হচ্ছে যে অবজেক্টিভ সি ব্যতিক্রমগুলি একই জায়গায় ব্যবহার করা উচিত যেখানে আপনি একটি চেক না করা ব্যতিক্রম ব্যবহার করবেন এবং ত্রুটি কোড রিটার্ন মান বা এনএসইরর মানগুলি যেখানে আপনি একটি চেক করা ব্যতিক্রম ব্যবহার করবেন সেখানে অগ্রাধিকার দেওয়া হবে।


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

15

আমি সংবেদনশীল বলে মনে করি এটি আপনার নিজের ক্লাসের সাথে এনএসইএসসেপশনকে বাড়িয়ে দিয়ে @ থ্রো ব্যবহার করা আরও সুন্দর। তারপরে আপনি একই ধরণের স্বরলিপি ব্যবহার করে শেষ পর্যন্ত ধরা চেষ্টা করুন:

@try {
.....
}
@catch{
...
}
@finally{
...
}

অ্যাপল এখানে কীভাবে ব্যতিক্রম ছোঁড়াবেন এবং পরিচালনা করবেন তা এখানে ব্যাখ্যা করেছে: ব্যতিক্রম ছোঁড়া ব্যতিক্রমগুলি


আমি এখনও চেষ্টা ব্লকে রানটাইম ব্যতিক্রম দ্বারা ক্র্যাশ হয়েছি
ফ্যামফামফ্যাম

14

ওবিজেসি ২.০, যেহেতু অবজেক্টিভ-সি ব্যতিক্রমগুলি সি এর সেটজ্যাম্প () লংজ্যাম্প () এর জন্য আর একটি মোড়ক নয়, এবং সি ++ ব্যতিক্রমের সাথে সামঞ্জস্যপূর্ণ, @ চেষ্টা "বিনা মূল্যে", তবে ব্যতিক্রম ছোঁড়া এবং ধরা আরও বেশি ব্যয়বহুল।

যাইহোক, জবাব (এনএসএসর্ট এবং এনএসসিএরসেট ম্যাক্রো পরিবার ব্যবহার করে) এনএসইসেপশনকে ছুঁড়ে ফেলেছে এবং এগুলি রিস স্টেট হিসাবে ব্যবহার করার জন্য এই বুদ্ধিমানের কাজ।


জানা ভাল! আমাদের একটি তৃতীয় পক্ষের লাইব্রেরি রয়েছে যা আমরা সংশোধন করতে চাই না যে এমনকি ক্ষুদ্রতম ত্রুটির জন্য ব্যতিক্রম ছোঁড়ে। আমাদের সেগুলিকে অ্যাপ্লিকেশনটিতে এক জায়গায় ধরতে হবে এবং এটি কেবল আমাদের চূর্ণবিচূর্ণ করে তোলে, তবে এটি আমাকে কিছুটা ভাল বোধ করে।
ইউরি ব্রিগ্যান্স

8

ব্যতিক্রমের পরিবর্তে ব্যর্থতা যোগাযোগ করতে এনএসইরর ব্যবহার করুন।

এনএসইরর সম্পর্কে দ্রুত পয়েন্টগুলি:

  • এনএসইরর সি স্টাইলের ত্রুটি কোডগুলি (পূর্ণসংখ্যা) এর মূল কারণটি পরিষ্কারভাবে সনাক্ত করতে দেয় এবং আশা করি ত্রুটি হ্যান্ডলারের ত্রুটিটি কাটিয়ে উঠতে অনুমতি দেয়। আপনি এনএসইরর এর উদাহরণগুলিতে এস লাইব্রেরি থেকে সি লাইব্রেরি থেকে ত্রুটি কোডগুলি খুব সহজেই মোড়ানো করতে পারেন।

  • এনএসইরর এর একটি অবজেক্ট হওয়ার সুবিধাও রয়েছে এবং এর ব্যবহারকারীর তথ্য অভিধানের সদস্যের সাথে আরও বিশদভাবে ত্রুটিটি বর্ণনা করার উপায় সরবরাহ করে।

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

রেফারেন্স লিঙ্ক: রেফারেন্স


এই মন্তব্য প্রশ্নের উত্তর দেয় না। ক্র্যাশ রিপোর্টের কাঠামোটি প্রত্যাশার মতো কাজ করছে কিনা তা পরীক্ষা করতে পারে ওপি কেবল অ্যাপটিকে ক্র্যাশ করতে চায়।
সাইমন

7

"দ্য বিগ Nerd রাঞ্চ গাইড (চতুর্থ সংস্করণ)" থেকে আমি এটি শিখেছি:

@throw [NSException exceptionWithName:@"Something is not right exception"
                               reason:@"Can't perform this operation because of this or that"
                             userInfo:nil];

ঠিক আছে, তবে এটি সম্পর্কে খুব বেশি কিছু জানায় না userInfo:nil। :)
সিউর

6

আপনি চেষ্টা ক্যাচ ব্লকে ব্যতিক্রম উত্থাপনের জন্য দুটি পদ্ধতি ব্যবহার করতে পারেন

@throw[NSException exceptionWithName];

বা দ্বিতীয় পদ্ধতি

NSException e;
[e raise];

3

আমি বিশ্বাস করি স্বাভাবিক প্রোগ্রাম প্রবাহ নিয়ন্ত্রণ করতে আপনার কখনও ব্যতিক্রম ব্যবহার করা উচিত নয়। যখনই কিছু মান পছন্দসই মানের সাথে মেলে না, তখন ব্যতিক্রমগুলি ছুঁড়ে ফেলা উচিত।

উদাহরণস্বরূপ, যদি কোনও ফাংশন কোনও মান গ্রহণ করে এবং সেই মানটিকে কখনই শূন্য করার অনুমতি দেওয়া হয় না, তবে ব্যতিক্রম চালিয়ে নেওয়া ঠিক আছে তবে কিছু 'স্মার্ট' করার চেষ্টা করা ...

Ries


0

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


0

মামলার জন্য নমুনা কোড: @ থ্রো ([এনএসইএসসেপশন ব্যতিক্রম নাম সহ: ...

- (void)parseError:(NSError *)error
       completionBlock:(void (^)(NSString *error))completionBlock {


    NSString *resultString = [NSString new];

    @try {

    NSData *errorData = [NSData dataWithData:error.userInfo[@"SomeKeyForData"]];

    if(!errorData.bytes) {

        @throw([NSException exceptionWithName:@"<Set Yours exc. name: > Test Exc" reason:@"<Describe reason: > Doesn't contain data" userInfo:nil]);
    }


    NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:errorData
                                                                 options:NSJSONReadingAllowFragments
                                                                   error:&error];

    resultString = dictFromData[@"someKey"];
    ...


} @catch (NSException *exception) {

      NSLog( @"Caught Exception Name: %@", exception.name);
      NSLog( @"Caught Exception Reason: %@", exception.reason );

    resultString = exception.reason;

} @finally {

    completionBlock(resultString);
}

}

ব্যবহার:

[self parseError:error completionBlock:^(NSString *error) {
            NSLog(@"%@", error);
        }];

আরেকটি আরও উন্নত ব্যবহারের ক্ষেত্রে:

- (void)parseError:(NSError *)error completionBlock:(void (^)(NSString *error))completionBlock {

NSString *resultString = [NSString new];

NSException* customNilException = [NSException exceptionWithName:@"NilException"
                                                          reason:@"object is nil"
                                                        userInfo:nil];

NSException* customNotNumberException = [NSException exceptionWithName:@"NotNumberException"
                                                                reason:@"object is not a NSNumber"
                                                              userInfo:nil];

@try {

    NSData *errorData = [NSData dataWithData:error.userInfo[@"SomeKeyForData"]];

    if(!errorData.bytes) {

        @throw([NSException exceptionWithName:@"<Set Yours exc. name: > Test Exc" reason:@"<Describe reason: > Doesn't contain data" userInfo:nil]);
    }


    NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:errorData
                                                                 options:NSJSONReadingAllowFragments
                                                                   error:&error];

    NSArray * array = dictFromData[@"someArrayKey"];

    for (NSInteger i=0; i < array.count; i++) {

        id resultString = array[i];

        if (![resultString isKindOfClass:NSNumber.class]) {

            [customNotNumberException raise]; // <====== HERE is just the same as: @throw customNotNumberException;

            break;

        } else if (!resultString){

            @throw customNilException;        // <======

            break;
        }

    }

} @catch (SomeCustomException * sce) {
    // most specific type
    // handle exception ce
    //...
} @catch (CustomException * ce) {
    // most specific type
    // handle exception ce
    //...
} @catch (NSException *exception) {
    // less specific type

    // do whatever recovery is necessary at his level
    //...
    // rethrow the exception so it's handled at a higher level

    @throw (SomeCustomException * customException);

} @finally {
    // perform tasks necessary whether exception occurred or not

}

}


-7

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

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

তবে এই থ্রেডের প্রশ্নের উত্তর এখনও পাওয়া যায় নি একটি ব্যতিক্রম ছড়িয়ে দেওয়ার সর্বোত্তম উপায় কী। এনএসইররর ফেরার উপায়গুলি সুস্পষ্ট।

তাই কি এটি: [এনএসইসেপশন উত্থাপন: ... @ থ্রো [[এনএসইসেপশন বরাদ্দ] আর্ট উইথনাম .... বা @ থ্রো [[মাই কাস্টম এক্সেপশন ...?

আমি এখানে চেক / চেক করা নিয়ম উপরের চেয়ে কিছুটা আলাদাভাবে ব্যবহার করি।

(এখানে জাভা রূপক ব্যবহার করে) চেক করা / চেক করা না হওয়াতে আসল পার্থক্যটি গুরুত্বপূর্ণ -> আপনি ব্যতিক্রম থেকে পুনরুদ্ধার করতে পারবেন কিনা। এবং পুনরুদ্ধার করার অর্থ আমি কেবল ক্র্যাশ নয়।

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

আমি এনএসইসিপশন ব্যবহার করি: রানটাইম ব্যতিক্রমগুলির জন্য উত্থাপন করুন যেহেতু উচ্চতর স্তরে এটি ধরতে এবং লগ ইন করা ব্যতীত আমার ব্যতিক্রম থেকে পুনরুদ্ধার করার কোনও উপায় নেই। এবং এটির জন্য একটি কাস্টম ক্লাস তৈরির কোনও অর্থ নেই।

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


4
"উদ্দেশ্য সিতে ব্যতিক্রমগুলি সাধারণত ব্যবহার না করার কোনও কারণ নেই" এই জাতীয় জেনারেটমেন্ট বিবৃতি দেওয়ার আগে ত্রুটি মামলার স্বাভাবিক প্রবাহের অংশ হিসাবে ব্যতিক্রমগুলি সহ একটি সার্ভারকে প্রোগ্রাম করার চেষ্টা করার পরামর্শ দেব। বিশ্বাস করুন বা না করুন, ওবিজেসিতে উচ্চ কার্যকারিতা অ্যাপ্লিকেশনগুলি (বা অ্যাপ্লিকেশনগুলির কমপক্ষে কিছু অংশ) লেখার কারণ রয়েছে এবং ব্যতিক্রমগুলি ছুঁড়ে দেওয়া সাধারণত কর্মক্ষমতা মারাত্মকভাবে বাধা দেয়।
jbenet

6
কোকোয় ব্যতিক্রম না ব্যবহার করার জন্য খুব ভাল কারণ রয়েছে। আরও তথ্যের জন্য এখানে বিল বাম্পার্নারের উত্তর দেখুন: stackoverflow.com / প্রশ্নগুলি / 787878ip696try / আইফোন-try-end-try/… । তিনি কী বিষয়ে কথা বলছেন তা তিনি জানেন (ইঙ্গিত: তার নিয়োগকর্তাকে পরীক্ষা করুন)। কোকোয় ব্যতিক্রমগুলি অপরিবর্তনযোগ্য ত্রুটি হিসাবে বিবেচনা করা হয় এবং অস্থির অবস্থায় সিস্টেমটি ছেড়ে যেতে পারে। এনএসইররর হল প্রায় সাধারণ ত্রুটিগুলি পাস করার উপায়।
ব্র্যাড লারসন

ব্যতিক্রম ব্যতিক্রম । ব্যবসায়িক বিধি ব্যর্থতা অবশ্যই যোগ্যতা অর্জন করে না। "ব্যতিক্রম-ভারী কোড সন্ধান এবং ডিজাইনের ফলস্বরূপ শালীন পারফেক্ট বিজয় হতে পারে" " এমএসডিএন কোডিংহরর.com
জোনাথন

3
ব্যতিক্রমগুলি ব্লকগুলি থেকে ছোঁড়া যায় না। একটি এআরসি পরিবেশে ফেলে দেওয়া ব্যতিক্রমগুলি আপনার প্রোগ্রামটিকে ফাঁস করে দিতে পারে। এইভাবে ডাউনভোট।
মোসজি

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