คำถามติดแท็ก try-catch

try-catch เป็นโครงสร้างทางไวยากรณ์สำหรับการจับข้อยกเว้นที่ยกขึ้นโดยส่วนโค้ด

5
ลองจับโค้ดของฉันให้เร็วขึ้นไหม?
ฉันเขียนโค้ดเพื่อทดสอบผลกระทบของการลองจับ แต่เห็นผลลัพธ์ที่น่าประหลาดใจ static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); …

10
ฉันสามารถตรวจจับข้อยกเว้น Java หลายข้อใน catch clause เดียวกันได้หรือไม่
ใน Java ฉันต้องการทำสิ่งนี้: try { ... } catch (/* code to catch IllegalArgumentException, SecurityException, IllegalAccessException, and NoSuchFieldException at the same time */) { someCode(); } ...แทน: try { ... } catch (IllegalArgumentException e) { someCode(); } catch (SecurityException e) { someCode(); } catch (IllegalAccessException e) { someCode(); } catch (NoSuchFieldException …

17
เหตุใดจึงต้องจับและสร้างข้อยกเว้นขึ้นใหม่ใน C #
ฉันกำลังดูบทความC # - วัตถุการถ่ายโอนข้อมูลบน DTO ที่ต่อเนื่องกันได้ บทความประกอบด้วยรหัสชิ้นนี้: public static string SerializeDTO(DTO dto) { try { XmlSerializer xmlSer = new XmlSerializer(dto.GetType()); StringWriter sWriter = new StringWriter(); xmlSer.Serialize(sWriter, dto); return sWriter.ToString(); } catch(Exception ex) { throw ex; } } ส่วนที่เหลือของบทความดูมีเหตุผลและสมเหตุสมผล (สำหรับ noob) แต่การลองจับการขว้างเป็น WtfException ... นี่มันไม่เทียบเท่ากับการจัดการกับข้อยกเว้นหรือเปล่า? Ergo: public static string SerializeDTO(DTO dto) …

10
เป็นวิธีปฏิบัติที่ดีในการใช้ try-exception-else ใน Python หรือไม่?
ฉันเห็นบล็อกเป็นครั้งคราวใน Python try: try_this(whatever) except SomeException as exception: #Handle exception else: return something อะไรคือเหตุผลที่ทำให้การลองยกเว้นอื่นมีอยู่ ฉันไม่ชอบการเขียนโปรแกรมแบบนั้นเนื่องจากใช้ข้อยกเว้นในการควบคุมการไหล อย่างไรก็ตามหากมันรวมอยู่ในภาษานั้นจะต้องมีเหตุผลที่ดีสำหรับมันใช่ไหม? มันเป็นความเข้าใจของฉันว่าข้อยกเว้นไม่ใช่ข้อผิดพลาดและควรใช้สำหรับเงื่อนไขพิเศษเท่านั้น (เช่นฉันพยายามเขียนไฟล์ลงในดิสก์และไม่มีที่ว่างเพิ่มเติมหรือบางทีฉันไม่ได้รับอนุญาต) และไม่ใช่การไหล ควบคุม. ปกติฉันจัดการข้อยกเว้นเป็น: something = some_default_value try: something = try_this(whatever) except SomeException as exception: #Handle exception finally: return something หรือถ้าฉันไม่ต้องการคืนสิ่งใดจริงๆหากมีข้อยกเว้นเกิดขึ้น: try: something = try_this(whatever) return something except SomeException as exception: #Handle exception

16
ทำไมฉันไม่ควรห่อทุกบล็อคใน“ ลอง” -“ จับ”?
ฉันเชื่อเสมอว่าหากวิธีการใดสามารถทำให้เกิดข้อยกเว้นได้ก็ไม่ควรที่จะป้องกันการโทรนี้ด้วยการลองบล็อกที่มีความหมาย ฉันเพิ่งโพสต์ ' คุณควรตัดสายที่สามารถลองจับบล็อกได้เสมอ 'สำหรับคำถามนี้และได้รับการบอกว่าเป็น' คำแนะนำที่ไม่ดีอย่างน่าทึ่ง '- ฉันต้องการเข้าใจว่าทำไม

11
ฉันสามารถลอง / จับคำเตือนได้หรือไม่?
ฉันต้องการที่จะจับคำเตือนบางอย่างที่ถูกโยนออกมาจากฟังก์ชั่นพื้นเมือง php แล้วจัดการพวกเขา โดยเฉพาะ: array dns_get_record ( string $hostname [, int $type= DNS_ANY [, array &$authns [, array &$addtl ]]] ) มันจะส่งคำเตือนเมื่อแบบสอบถาม DNS ล้มเหลว try/ catchไม่ทำงานเนื่องจากคำเตือนไม่ใช่ข้อยกเว้น ตอนนี้ฉันมี 2 ตัวเลือก: set_error_handler ดูเหมือนว่า overkill เพราะฉันต้องใช้มันเพื่อกรองคำเตือนทุกอย่างในหน้า (นี่เป็นเรื่องจริงหรือ?); ปรับการรายงานข้อผิดพลาด / การแสดงผลเพื่อให้คำเตือนเหล่านี้ไม่ได้รับการสะท้อนไปยังหน้าจอจากนั้นตรวจสอบค่าตอบแทน; ถ้าเป็นเช่นนั้นจะfalseไม่พบระเบียนสำหรับชื่อโฮสต์ การปฏิบัติที่ดีที่สุดที่นี่คืออะไร

5
วิธีเขียน trycatch ใน R
ฉันต้องการเขียนtrycatchโค้ดเพื่อจัดการกับข้อผิดพลาดในการดาวน์โหลดจากเว็บ url <- c( "http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html", "http://en.wikipedia.org/wiki/Xz") y <- mapply(readLines, con=url) คำสั่งสองคำสั่งเหล่านี้ทำงานได้สำเร็จ ด้านล่างนี้ฉันสร้างที่อยู่เว็บที่ไม่มีอยู่: url <- c("xxxxx", "http://en.wikipedia.org/wiki/Xz") url[1]ไม่ได้อยู่. เราจะเขียนtrycatchloop (function) อย่างไร: เมื่อ URL ไม่ถูกต้องผลลัพธ์จะเป็น: "เว็บ URL ไม่ถูกต้องไม่สามารถรับได้" เมื่อ URL ผิดรหัสจะไม่หยุด แต่ยังคงดาวน์โหลดต่อไปจนกว่าจะสิ้นสุดรายการ URL หรือไม่

16
ทำไม“ ยกเว้น: ผ่าน” การฝึกเขียนโปรแกรมที่ไม่ดี?
ฉันมักจะเห็นความคิดเห็นเกี่ยวกับคำถาม Stack Overflow อื่น ๆ เกี่ยวกับวิธีการใช้งานที่except: passหมดกำลังใจ ทำไมสิ่งนี้ถึงไม่ดี? บางครั้งฉันก็ไม่สนใจว่าข้อผิดพลาดคืออะไรและฉันต้องการที่จะดำเนินการต่อกับรหัส try: something except: pass เหตุใดการใช้except: passบล็อกที่ไม่ดี อะไรทำให้มันแย่ มันเป็นความจริงที่ว่าฉันpassมีข้อผิดพลาดหรือว่าฉันexceptผิดพลาด?

11
ลอง / บล็อกจับเจ็บประสิทธิภาพเมื่อยกเว้นจะไม่โยน?
ในระหว่างการตรวจสอบรหัสกับพนักงานของ Microsoft เราพบเจอโค้ดส่วนใหญ่ภายในtry{}บล็อก เธอและตัวแทนด้านไอทีแนะนำว่าสิ่งนี้อาจมีผลต่อประสิทธิภาพของรหัส ในความเป็นจริงพวกเขาแนะนำว่ารหัสส่วนใหญ่ควรอยู่นอกบล็อคลอง / จับและควรตรวจสอบเฉพาะส่วนที่สำคัญเท่านั้น พนักงานไมโครซอฟท์ได้เพิ่มและกล่าวว่าเอกสารทางเทคนิคที่จะเกิดขึ้นเตือนว่าบล็อก try / catch ไม่ถูกต้อง ฉันได้ดูไปรอบ ๆ และพบว่าสามารถส่งผลกระทบต่อการปรับแต่งได้ แต่ดูเหมือนว่าจะใช้เฉพาะเมื่อมีการแชร์ตัวแปรระหว่างขอบเขต ฉันไม่ได้ถามเกี่ยวกับความสามารถในการบำรุงรักษาของรหัสหรือแม้กระทั่งการจัดการข้อยกเว้นที่ถูกต้อง (รหัสที่เป็นปัญหาต้องได้รับการพิจารณาใหม่ ฉันยังไม่ได้หมายถึงการใช้ข้อยกเว้นสำหรับการควบคุมการไหลนี่เป็นความผิดที่ชัดเจนในกรณีส่วนใหญ่ สิ่งเหล่านี้เป็นปัญหาที่สำคัญ (บางอย่างมีความสำคัญมากกว่า) แต่ไม่เน้นที่นี่ บล็อก try / catch มีผลกับประสิทธิภาพอย่างไรเมื่อข้อยกเว้นไม่ถูกส่งออก?

12
โค้ดในคำสั่งในที่สุดจะเริ่มทำงานหรือไม่หากฉันส่งคืนค่าในบล็อกลองใช้
ฉันกำลังตรวจสอบโค้ดสำหรับเพื่อนและบอกว่าเขากำลังใช้คำสั่งส่งคืนภายในบล็อกการทดลองใช้ในที่สุด รหัสในส่วนสุดท้ายยังคงทำงานอยู่แม้ว่าบล็อกทดลองที่เหลือจะไม่ใช้งานหรือไม่ ตัวอย่าง: public bool someMethod() { try { return true; throw new Exception("test"); // doesn't seem to get executed } finally { //code in question } }

25
คุณใช้การจับซ้ำได้อย่างไร
ลองจับมีไว้เพื่อช่วยในการจัดการข้อยกเว้น หมายความว่าจะช่วยให้ระบบของเรามีความแข็งแกร่งยิ่งขึ้น: พยายามกู้คืนจากเหตุการณ์ที่ไม่คาดคิด เราสงสัยว่ามีบางอย่างอาจเกิดขึ้นเมื่อดำเนินการและคำสั่ง (ส่งข้อความ) ดังนั้นจึงถูกปิดล้อมในการลอง หากสิ่งนั้นเกือบเกิดขึ้นโดยไม่คาดคิดเราสามารถทำบางสิ่งได้: เราเขียนสิ่งที่จับได้ ฉันไม่คิดว่าเราถูกเรียกให้เข้าสู่ระบบยกเว้น สิ่งที่ฉันบล็อก catch มีขึ้นเพื่อให้โอกาสเราในการกู้คืนจากข้อผิดพลาด ตอนนี้สมมติว่าเรากู้คืนจากข้อผิดพลาดเพราะเราสามารถแก้ไขสิ่งที่ผิด อาจเป็นเรื่องดีสุด ๆ ที่จะลองทำใหม่: try{ some_instruction(); } catch (NearlyUnexpectedException e){ fix_the_problem(); retry; } สิ่งนี้จะตกอยู่ในวงนิรันดร์อย่างรวดเร็ว แต่สมมุติว่า fix_the_problem คืนค่าเป็นจริงจากนั้นเราลองอีกครั้ง เนื่องจากไม่มีสิ่งเช่นนี้ใน Java คุณจะแก้ไขปัญหานี้อย่างไร สิ่งที่จะเป็นรหัสการออกแบบที่ดีที่สุดของคุณสำหรับการแก้ปัญหานี้? นี่เป็นคำถามเชิงปรัชญาเนื่องจากฉันรู้แล้วว่าสิ่งที่ฉันขอไม่ได้รับการสนับสนุนโดยตรงจาก Java

15
วิธีใช้ลอง catch สำหรับการจัดการข้อยกเว้นเป็นวิธีปฏิบัติที่ดีที่สุด
ในขณะที่รักษารหัสของเพื่อนร่วมงานจากแม้กระทั่งคนที่อ้างว่าเป็นนักพัฒนาอาวุโสฉันมักจะเห็นรหัสต่อไปนี้: try { //do something } catch { //Do nothing } หรือบางครั้งพวกเขาเขียนข้อมูลการบันทึกลงในไฟล์บันทึกเช่นtry catchบล็อกต่อไปนี้ try { //do some work } catch(Exception exception) { WriteException2LogFile(exception); } ฉันแค่สงสัยว่าสิ่งที่พวกเขาทำเป็นแนวปฏิบัติที่ดีที่สุดหรือไม่? มันทำให้ฉันสับสนเพราะในความคิดของฉันผู้ใช้ควรรู้ว่าเกิดอะไรขึ้นกับระบบ โปรดให้คำแนะนำกับฉัน

20
ทำไมจึงลอง {... } ในที่สุด {…} ดี ลอง {…} จับ {} ไม่ดีใช่ไหม
ฉันเคยเห็นคนพูดว่ามันเป็นรูปแบบที่ไม่ดีที่จะใช้ catch โดยไม่มีข้อโต้แย้งโดยเฉพาะถ้า catch นั้นไม่ได้ทำอะไร: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); อย่างไรก็ตามนี่ถือว่าเป็นรูปแบบที่ดี: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { …

20
เหตุใดการจับที่ว่างเปล่าจึงปิดกั้นความคิดที่ไม่ดี [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ ฉันเพิ่งเห็นคำถามเกี่ยวกับลองจับซึ่งคน (รวมถึง Jon Skeet) ว่าบล็อกว่างเปล่าจับเป็นความคิดที่ไม่ดีจริง ๆ ทำไมเป็นเช่นนี้ ไม่มีสถานการณ์ที่จับเปล่าไม่มีการตัดสินใจออกแบบที่ผิดหรือเปล่า? ตัวอย่างเช่นฉันหมายถึงบางครั้งคุณต้องการรับข้อมูลเพิ่มเติมจากที่อื่น (เว็บเซอร์, ฐานข้อมูล) และคุณไม่สนใจว่าคุณจะได้รับข้อมูลนี้หรือไม่ ดังนั้นคุณพยายามที่จะรับมันและหากมีอะไรเกิดขึ้นก็ไม่เป็นไรฉันจะเพิ่ม "catch (ข้อยกเว้นละเว้น) {}" และนั่นคือทั้งหมด

7
การใช้บล็อกแบบลองดักจับมีราคาแพงแม้ว่าจะไม่มีข้อยกเว้นเกิดขึ้นหรือไม่
เรารู้ว่ามันแพงในการจับยกเว้น แต่มันก็มีราคาแพงที่จะใช้บล็อก try-catch ใน Java แม้ว่าข้อยกเว้นจะไม่ถูกโยนทิ้ง? ฉันพบคำถาม / คำตอบ Stack Overflow เหตุใดการลองบล็อกจึงมีราคาแพง แต่มันเป็น.NET

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.