คำถามติดแท็ก exception

ข้อยกเว้นเป็นเงื่อนไขผิดปกติที่ต้องมีการเบี่ยงเบนจากการไหลปกติของโปรแกรม โดยปกติข้อยกเว้นไม่ควรส่งผลให้เกิดความล้มเหลวทั้งหมด แต่จะเข้าร่วมโดยตัวจัดการข้อยกเว้น การจัดการข้อยกเว้นเป็นโครงสร้างที่มีอยู่แล้วในหลายภาษาโปรแกรม โดยปกติแล้วข้อยกเว้นจะถูกจัดการโดยการคลายสแต็กดังนั้นจึงย้อนกลับไปยังสถานะที่กำหนดนอกขอบเขตของข้อยกเว้นจากนั้นจึงเรียกใช้ตัวจัดการบล็อกหรือรูทีน

7
เริ่มต้นช่วยเหลือและมั่นใจใน Ruby?
ฉันเพิ่งเริ่มเขียนโปรแกรมใน Ruby และฉันกำลังดูการจัดการข้อยกเว้น ฉันสงสัยว่าensureทับทิมนั้นเทียบเท่ากับfinallyใน C # หรือไม่ ฉันควรจะมี: file = File.open("myFile.txt", "w") begin file << "#{content} \n" rescue #handle the error here ensure file.close unless file.nil? end หรือฉันควรทำเช่นนี้? #store the file file = File.open("myFile.txt", "w") begin file << "#{content} \n" file.close rescue #handle the error here ensure file.close unless file.nil? …

7
ฉันควรเพิ่มข้อยกเว้นใดในการรวมอาร์กิวเมนต์ที่ไม่ถูกต้อง / ผิดกฎหมายใน Python
ฉันสงสัยเกี่ยวกับวิธีปฏิบัติที่ดีที่สุดในการระบุการรวมอาร์กิวเมนต์ที่ไม่ถูกต้องใน Python ฉันเจอสถานการณ์บางอย่างที่คุณมีฟังก์ชั่นดังนี้ def import_to_orm(name, save=False, recurse=False): """ :param name: Name of some external entity to import. :param save: Save the ORM object before returning. :param recurse: Attempt to import associated objects as well. Because you need the original object to have a key to relate to, save must be …


11
จับข้อความข้อยกเว้นหลาม
import ftplib import urllib2 import os import logging logger = logging.getLogger('ftpuploader') hdlr = logging.FileHandler('ftplog.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) FTPADDR = "some ftp address" def upload_to_ftp(con, filepath): try: f = open(filepath,'rb') # file to send con.storbinary('STOR '+ filepath, f) # Send the file f.close() # Close file …

8
เมื่อใดที่ฉันควรใช้ noexcept จริงๆ
noexceptคำหลักที่สามารถนำมาประยุกต์ใช้ให้เหมาะสมกับลายเซ็นฟังก์ชั่นจำนวนมาก แต่ผมไม่แน่ใจว่าเมื่อฉันควรพิจารณาใช้มันในทางปฏิบัติ จากสิ่งที่ฉันได้อ่านจนถึงตอนนี้noexceptดูเหมือนว่าประเด็นสำคัญบางอย่างที่เกิดขึ้นเมื่อมีการเคลื่อนย้ายสิ่งก่อสร้าง อย่างไรก็ตามฉันยังคงไม่สามารถให้คำตอบที่น่าพอใจสำหรับคำถามเชิงปฏิบัติบางอย่างที่ทำให้ฉันอ่านเพิ่มเติมเกี่ยวกับnoexceptในตอนแรก มีตัวอย่างมากมายของฟังก์ชั่นที่ฉันรู้ว่าจะไม่ทิ้ง แต่สำหรับคอมไพเลอร์ไม่สามารถกำหนดได้ด้วยตัวเอง ฉันควรผนวกท้ายnoexceptประกาศฟังก์ชันในทุกกรณีเช่นนี้หรือไม่? ต้องคิดก่อนว่าจะต้องต่อท้ายหรือไม่noexceptหลังจากการประกาศฟังก์ชั่นทุกครั้งจะลดประสิทธิภาพการทำงานของโปรแกรมเมอร์ลงอย่างมาก (และตรงไปตรงมาจะเป็นความเจ็บปวดในตูด) สำหรับสถานการณ์ที่ฉันควรจะระมัดระวังมากขึ้นเกี่ยวกับการใช้noexceptและสำหรับสถานการณ์ที่ฉันจะได้รับไปด้วยนัยnoexcept(false)? ฉันสามารถเมื่อแนบเนียนคาดหวังที่จะสังเกตการปรับปรุงประสิทธิภาพการทำงานหลังจากที่ใช้noexcept? โดยเฉพาะอย่างยิ่งให้ตัวอย่างของรหัสที่คอมไพเลอร์ C ++ noexceptสามารถสร้างรหัสเครื่องดีขึ้นหลังจากที่นอกเหนือจากคะแนน โดยส่วนตัวแล้วฉันสนใจnoexceptเพราะมีอิสระมากขึ้นในการรวบรวมเพื่อใช้การเพิ่มประสิทธิภาพบางประเภทอย่างปลอดภัย คอมไพเลอร์สมัยใหม่ใช้ประโยชน์จากnoexceptวิธีนี้หรือไม่? ถ้าไม่ฉันสามารถคาดหวังให้พวกเขาบางคนทำเช่นนั้นได้ในอนาคตอันใกล้

30
วิธีการดึงข้อมูลควรส่งคืน 'null' หรือส่งข้อยกเว้นเมื่อไม่สามารถสร้างค่าส่งคืนได้หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันมีวิธีการที่ควรส่งคืนวัตถุหากพบ หากไม่พบฉันควร: ส่งคืน null โยนข้อยกเว้น อื่น ๆ

18
ผลของข้อยกเว้นต่อประสิทธิภาพใน Java คืออะไร
คำถาม: การจัดการข้อยกเว้นใน Java ช้าจริงหรือไม่ ภูมิปัญญาดั้งเดิมรวมถึงผลการค้นหาของ Google จำนวนมากกล่าวว่าไม่ควรใช้ตรรกะพิเศษสำหรับการไหลเวียนของโปรแกรมปกติใน Java โดยปกติจะมีสองเหตุผล มันช้ามาก - แม้ลำดับความสำคัญจะช้ากว่ารหัสปกติ (เหตุผลที่ให้แตกต่างกันไป) และ มันยุ่งเพราะคนคาดหวังว่าข้อผิดพลาดเท่านั้นที่จะจัดการในรหัสพิเศษ คำถามนี้เกี่ยวกับ # 1 ตัวอย่างเช่นหน้านี้อธิบายการจัดการข้อยกเว้น Java ว่า "ช้ามาก" และเกี่ยวข้องกับความช้าในการสร้างสตริงข้อความข้อยกเว้น - "สตริงนี้จะใช้ในการสร้างวัตถุยกเว้นที่ถูกโยนนี่ไม่เร็ว" บทความการจัดการข้อยกเว้นที่มีประสิทธิภาพใน Javaกล่าวว่า "เหตุผลนี้เกิดจากการสร้างวัตถุของการจัดการข้อยกเว้นซึ่งทำให้การโยนข้อยกเว้นช้าโดยเนื้อแท้" อีกเหตุผลหนึ่งคือการสร้างการติดตามสแต็กคือสิ่งที่ทำให้ช้าลง การทดสอบของฉัน (โดยใช้ Java 1.6.0_07, Java HotSpot 10.0, บน 32 บิต Linux) ระบุว่าการจัดการข้อยกเว้นไม่ช้ากว่าโค้ดปกติ ฉันลองใช้วิธีการในวงที่รันรหัสบางอย่าง ในตอนท้ายของวิธีการที่ผมใช้บูลที่จะบ่งชี้ว่าจะกลับมาหรือโยน วิธีนี้การประมวลผลจริงจะเหมือนกัน ฉันลองใช้วิธีการตามคำสั่งต่าง ๆ และหาค่าเฉลี่ยเวลาทดสอบของฉันโดยคิดว่า JVM อาจร้อนขึ้น ในการทดสอบทั้งหมดของฉันการขว้างอย่างน้อยเท่ากับการส่งคืนถ้าไม่เร็วขึ้น …

16
เหตุใดฉันจึงได้รับ UnsupportedOperationException เมื่อพยายามลบองค์ประกอบออกจากรายการ
ฉันมีรหัสนี้: public static String SelectRandomFromTemplate(String template,int count) { String[] split = template.split("|"); List<String> list=Arrays.asList(split); Random r = new Random(); while( list.size() > count ) { list.remove(r.nextInt(list.size())); } return StringUtils.join(list, ", "); } ฉันได้รับสิ่งนี้: 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): at java.util.AbstractList.remove(AbstractList.java:645) นี่จะเป็นวิธีที่ถูกต้องได้อย่างไร Java.15

11
ฉันจะบันทึกข้อผิดพลาด Python ด้วยข้อมูลการดีบักได้อย่างไร
ฉันกำลังพิมพ์ข้อความข้อยกเว้น Python ไปยังไฟล์บันทึกด้วยlogging.error: import logging try: 1/0 except ZeroDivisionError as e: logging.error(e) # ERROR:root:division by zero เป็นไปได้หรือไม่ที่จะพิมพ์ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับข้อยกเว้นและรหัสที่สร้างมันขึ้นมานอกเหนือจากสตริงข้อยกเว้น? สิ่งต่างๆเช่นหมายเลขบรรทัดหรือร่องรอยสแต็กจะดีมาก

30
กรณีต่อต้านการตรวจสอบข้อยกเว้น
เป็นเวลาหลายปีแล้วที่ฉันไม่สามารถรับคำตอบที่เหมาะสมสำหรับคำถามต่อไปนี้: เหตุใดนักพัฒนาซอฟต์แวร์บางคนจึงต่อต้านข้อยกเว้นที่ตรวจสอบ ฉันมีการสนทนามากมายอ่านสิ่งต่าง ๆ บนบล็อกอ่านสิ่งที่ Bruce Eckel ต้องพูด (คนแรกที่ฉันเห็นพูดต่อต้านพวกเขา) ขณะนี้ฉันกำลังเขียนโค้ดใหม่และให้ความสนใจอย่างระมัดระวังกับวิธีที่ฉันจัดการกับข้อยกเว้น ฉันพยายามที่จะเห็นมุมมองของฝูงชน "เราไม่ชอบการตรวจสอบข้อยกเว้น" และฉันก็ยังไม่เห็น ทุกบทสนทนาที่ฉันจบลงด้วยคำถามเดียวกันที่ยังไม่ได้รับคำตอบขอให้ฉันตั้งค่า: โดยทั่วไป (จากวิธีการออกแบบ Java) Error สำหรับสิ่งที่ไม่ควรถูกจับ (VM มีอาการแพ้ถั่วลิสงและมีคนทิ้งขวดถั่วลิสงลงไป) RuntimeException สำหรับสิ่งที่โปรแกรมเมอร์ทำผิด (โปรแกรมเมอร์เดินจากจุดสิ้นสุดของอาร์เรย์) Exception(ยกเว้นRuntimeException) สำหรับสิ่งที่อยู่นอกเหนือการควบคุมของโปรแกรมเมอร์ (ดิสก์เต็มในขณะที่เขียนไปยังระบบไฟล์มีการ จำกัด การจัดการไฟล์สำหรับกระบวนการแล้วและคุณไม่สามารถเปิดไฟล์ได้อีก) Throwable เป็นเพียงพาเรนต์ของชนิดข้อยกเว้นทั้งหมด อาร์กิวเมนต์ทั่วไปที่ฉันได้ยินคือถ้ามีข้อยกเว้นเกิดขึ้นจากนั้นนักพัฒนาทั้งหมดจะต้องทำคือออกจากโปรแกรม อาร์กิวเมนต์ที่พบบ่อยอีกข้อที่ฉันได้ยินคือการยกเว้นการตรวจสอบทำให้ยากต่อการกำหนดรหัสซ้ำ สำหรับอาร์กิวเมนต์ "สิ่งที่ฉันต้องทำคือออก" ฉันบอกว่าแม้ว่าคุณจะออกจากคุณต้องแสดงข้อความแสดงข้อผิดพลาดที่สมเหตุสมผล หากคุณเพียงแค่ลงโทษในการจัดการข้อผิดพลาดผู้ใช้ของคุณจะไม่มีความสุขมากเกินไปเมื่อโปรแกรมออกโดยไม่ระบุสาเหตุที่ชัดเจน สำหรับกลุ่ม "ทำให้ยากที่จะสร้างใหม่" ซึ่งบ่งชี้ว่าไม่ได้เลือกระดับที่เหมาะสมของสิ่งที่เป็นนามธรรม แทนที่จะประกาศวิธีการพ่นIOExceptionที่IOExceptionควรจะเปลี่ยนเป็นข้อยกเว้นที่เหมาะสมมากขึ้นสำหรับสิ่งที่เกิดขึ้นใน ฉันไม่มีปัญหาในการตัด Main ด้วยcatch(Exception)(หรือในบางกรณีcatch(Throwable)เพื่อให้แน่ใจว่าโปรแกรมสามารถออกจากระบบได้อย่างงดงาม - แต่ฉันมักจะจับข้อยกเว้นเฉพาะที่จำเป็นต้องใช้การทำเช่นนั้นทำให้ฉันสามารถแสดงที่เหมาะสมอย่างน้อยที่สุด ข้อความผิดพลาด. คำถามที่ผู้คนไม่เคยตอบคือ: หากคุณโยนRuntimeException คลาสย่อยแทนที่จะเป็นException …

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

10
มีความแตกต่างระหว่าง "โยน" และ "โยนอดีต" หรือไม่?
มีบางโพสต์ที่ถามว่าความแตกต่างระหว่างสองโพสต์นั้นมีอะไรบ้าง (ทำไมฉันต้องพูดถึงเรื่องนี้ด้วย ... ) แต่คำถามของฉันแตกต่างกันในวิธีที่ฉันเรียกว่า "throw ex" ในวิธีการจัดการข้อผิดพลาดเหมือนพระเจ้า public class Program { public static void Main(string[] args) { try { // something } catch (Exception ex) { HandleException(ex); } } private static void HandleException(Exception ex) { if (ex is ThreadAbortException) { // ignore then, return; } if (ex is ArgumentOutOfRangeException) …

30
ควรโยนข้อยกเว้นเมื่อใด
ฉันมีข้อยกเว้นที่สร้างขึ้นสำหรับทุกเงื่อนไขที่ใบสมัครของฉันไม่ได้คาดไว้ UserNameNotValidException, PasswordNotCorrectExceptionฯลฯ อย่างไรก็ตามฉันถูกบอกว่าฉันไม่ควรสร้างข้อยกเว้นสำหรับเงื่อนไขเหล่านั้น ใน UML ของฉันมีข้อยกเว้นสำหรับโฟลว์หลักดังนั้นทำไมมันไม่ควรเป็นข้อยกเว้น? คำแนะนำหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างข้อยกเว้น?

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

9
วิธีการเพิ่มการอนุญาตชัดแจ้งในแอปพลิเคชัน
ฉันพยายามเข้าถึงลิงค์ HTTP ที่ใช้HttpURLConnectionใน Android เพื่อดาวน์โหลดไฟล์ แต่ฉันได้รับคำเตือนนี้ในLogCat: WARN / System.err (223): java.net.SocketException: การอนุญาตถูกปฏิเสธ (อาจขาดการอนุญาตทางอินเทอร์เน็ต) ฉันเพิ่มลงandroid.Manifest.permissionในแอปพลิเคชันของฉันแล้ว แต่มันยังคงให้ข้อยกเว้นเหมือนเดิม

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