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

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

8
Debug.Assert vs Exception Throwing
ฉันได้อ่านบทความมากมาย (และคำถามที่คล้ายกันอีกสองสามข้อที่โพสต์บน StackOverflow) เกี่ยวกับวิธีการและเวลาที่จะใช้การยืนยันและฉันเข้าใจดี แต่ถึงกระนั้นฉันก็ไม่เข้าใจว่าแรงจูงใจแบบไหนที่ควรผลักดันให้ฉันใช้Debug.Assertแทนที่จะทิ้งข้อยกเว้นธรรมดา ๆ สิ่งที่ฉันหมายถึงคือใน. NET การตอบสนองเริ่มต้นสำหรับการยืนยันที่ล้มเหลวคือการ "หยุดโลก" และแสดงกล่องข้อความให้กับผู้ใช้ แม้ว่าพฤติกรรมแบบนี้จะสามารถแก้ไขได้ แต่ฉันพบว่ามันน่ารำคาญและซ้ำซ้อนมากที่จะทำเช่นนั้นในขณะที่ฉันทำได้เพียงแค่โยนข้อยกเว้นที่เหมาะสมแทน ด้วยวิธีนี้ฉันสามารถเขียนข้อผิดพลาดลงในบันทึกของแอปพลิเคชันได้อย่างง่ายดายก่อนที่จะโยนข้อยกเว้นและนอกจากนี้แอปพลิเคชันของฉันไม่จำเป็นต้องหยุดทำงาน เหตุใดฉันจึงควรใช้Debug.Assertแทนข้อยกเว้นธรรมดา การวางคำยืนยันในที่ที่ไม่ควรเป็นเพียงแค่อาจทำให้เกิด "พฤติกรรมที่ไม่ต้องการ" ได้ทุกรูปแบบดังนั้นในมุมมองของฉันฉันไม่ได้ประโยชน์อะไรเลยจากการใช้การยืนยันแทนที่จะโยนข้อยกเว้น คุณเห็นด้วยกับฉันหรือว่าฉันพลาดอะไรที่นี่? หมายเหตุ:ฉันเข้าใจอย่างถ่องแท้ว่าความแตกต่างคือ "ในทางทฤษฎี" (Debug vs Release, รูปแบบการใช้งานและอื่น ๆ ) แต่อย่างที่ฉันเห็นฉันจะดีกว่าที่จะทิ้งข้อยกเว้นแทนการยืนยัน เนื่องจากหากพบข้อบกพร่องในรุ่นที่ใช้งานจริงฉันก็ยังคงต้องการให้ "การยืนยัน" ล้มเหลว (อย่างไรก็ตาม "ค่าใช้จ่าย" มีขนาดเล็กมาก) ดังนั้นฉันจะดีกว่าที่จะทิ้งข้อยกเว้นแทน แก้ไข:วิธีที่ฉันเห็นหากการยืนยันล้มเหลวนั่นหมายความว่าแอปพลิเคชันเข้าสู่สถานะที่เสียหายและไม่คาดคิด เหตุใดฉันจึงต้องการดำเนินการต่อไป? ไม่สำคัญว่าแอปพลิเคชันจะทำงานบนเวอร์ชันดีบักหรือเวอร์ชันรีลีส เช่นเดียวกันสำหรับทั้งสองอย่าง

11
ทดสอบข้อยกเว้นที่คาดไว้ใน Kotlin
ใน Java โปรแกรมเมอร์สามารถระบุข้อยกเว้นที่คาดไว้สำหรับกรณีทดสอบ JUnit เช่นนี้: @Test(expected = ArithmeticException.class) public void omg() { int blackHole = 1 / 0; } ฉันจะทำสิ่งนี้ใน Kotlin ได้อย่างไร ฉันได้ลองใช้รูปแบบไวยากรณ์สองรูปแบบแล้ว แต่ไม่ได้ผล: import org.junit.Test // ... @Test(expected = ArithmeticException) fun omg() Please specify constructor invocation; classifier 'ArithmeticException' does not have a companion object @Test(expected = ArithmeticException.class) fun omg() …

4
ข้อยกเว้น NoClassDefFoundError สำหรับ CacheProvider
ฉันเป็นคนใหม่ในฤดูใบไม้ผลิและจำศีลดังนั้นฉันจึงพยายามใช้เว็บแอปพลิเคชันง่ายๆที่ใช้ Spring 3 + hibernate 4 ในขณะที่ฉันเริ่ม Tomcat ฉันมีข้อยกเว้นนี้ java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getDeclaredMethods(Class.java:1791) ... Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) ฉันพบว่าคลาสนี้อยู่ใน hibernate-core สำหรับ hibernate 3 แต่ฉันไม่พบใน hibernate 4 ส่วนของ context.xml ของฉันสำหรับการคงอยู่: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/> <property name="username" value="xxx"/> …

2
เหตุใด Double.parseDouble (null) และ Integer.parseInt (null) จึงมีข้อยกเว้นที่แตกต่างกัน
เหตุใด Double.parseDouble (null) และ Integer.parseInt (null) จึงมีข้อยกเว้นที่แตกต่างกัน นี่เป็นอุบัติเหตุทางประวัติศาสตร์หรือโดยเจตนา? เอกสารนี้ระบุข้อยกเว้นสองประเภทอย่างชัดเจนและอีกประเภทDouble.parseDouble(...)หนึ่งสำหรับInteger.parseInt()แต่ดูเหมือนว่าไม่สอดคล้องกัน: Integer.parseInt(null); // throws java.lang.NumberFormatException: null อย่างไรก็ตาม Double.parseDouble(null); // throws java.lang.NullPointerException


3
ฉันจะเพิ่มข้อยกเว้นใน Rails ให้ทำงานเหมือนกับข้อยกเว้น Rails อื่น ๆ ได้อย่างไร
ฉันต้องการเพิ่มข้อยกเว้นเพื่อให้ทำเช่นเดียวกับข้อยกเว้นของ Rails ปกติ แสดงข้อยกเว้นและการติดตามสแต็กในโหมดการพัฒนาเป็นพิเศษและแสดงหน้า "ขออภัยมีข้อผิดพลาดเกิดขึ้น" ในโหมดการผลิต ฉันลองทำสิ่งต่อไปนี้: raise "safety_care group missing!" if group.nil? แต่มันเขียน"ERROR signing up, group missing!"ลงในไฟล์ development.log

13
ข้อยกเว้น mvc asp.net แบบไม่ต่อเนื่อง:“ ไม่พบวิธีการดำเนินการสาธารณะ ABC บนคอนโทรลเลอร์ XYZ”
ฉันได้รับข้อยกเว้นไม่ต่อเนื่องโดยแจ้งว่า asp.net mvc ไม่พบวิธีการดำเนินการ นี่คือข้อยกเว้น: ไม่พบวิธีการดำเนินการสาธารณะ 'Fill' ในตัวควบคุม 'Schoon.Form.Web.Controllers.ChrisController' ฉันคิดว่าฉันตั้งค่าการกำหนดเส้นทางอย่างถูกต้องเนื่องจากแอปพลิเคชันนี้ใช้งานได้เกือบตลอดเวลา นี่คือวิธีการดำเนินการของคอนโทรลเลอร์ [ActionName("Fill")] [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post), UserIdFilter, DTOFilter] public ActionResult Fill(int userId, int subscriberId, DisplayMode? mode) { //… } เส้นทาง: routes.MapRoute( "SchoonForm", "Form/Fill/{subscriberId}", new { controller = "ChrisController", action = "Fill" }, new { subscriberId = @"\d+" } ); และนี่คือสแต็ก: System.Web.HttpException: …

24
คุณชอบข้อยกเว้นหรือรหัสส่งคืนข้อใดและเพราะเหตุใด
คำถามของฉันคือสิ่งที่นักพัฒนาส่วนใหญ่ชอบสำหรับการจัดการข้อผิดพลาดข้อยกเว้นหรือรหัสส่งคืนข้อผิดพลาด โปรดระบุภาษา (หรือตระกูลภาษา) และเหตุผลที่คุณชอบมากกว่าภาษาอื่น ฉันกำลังถามเรื่องนี้ด้วยความอยากรู้อยากเห็น โดยส่วนตัวแล้วฉันชอบรหัสส่งคืนข้อผิดพลาดเนื่องจากมีการระเบิดน้อยกว่าและไม่บังคับให้รหัสผู้ใช้จ่ายค่าปรับประสิทธิภาพข้อยกเว้นหากไม่ต้องการ อัปเดต: ขอบคุณสำหรับคำตอบทั้งหมด! ฉันต้องบอกว่าแม้ว่าฉันจะไม่ชอบการไหลของโค้ดที่คาดเดาไม่ได้ด้วยข้อยกเว้น คำตอบเกี่ยวกับรหัสส่งคืน (และพี่ชายของพวกเขาจัดการ) จะเพิ่ม Noise จำนวนมากให้กับรหัส

12
สิ่งที่ทำให้เกิด "ความยาวไม่ถูกต้องสำหรับอาร์เรย์ถ่าน Base-64"
ฉันมีน้อยมากที่จะไปที่นี่ ฉันทำซ้ำสิ่งนี้ในเครื่องไม่ได้ แต่เมื่อผู้ใช้ได้รับข้อผิดพลาดฉันได้รับการแจ้งเตือนข้อยกเว้นอีเมลอัตโนมัติ: Invalid length for a Base-64 char array. at System.Convert.FromBase64String(String s) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) at System.Web.UI.HiddenFieldPageStatePersister.Load() ฉันมีแนวโน้มที่จะคิดว่ามีปัญหากับข้อมูลที่ถูกกำหนดให้กับ viewstate ตัวอย่างเช่น: List<int> SelectedActionIDList = GetSelectedActionIDList(); ViewState["_SelectedActionIDList"] = SelectedActionIDList; เป็นการยากที่จะคาดเดาแหล่งที่มาของข้อผิดพลาดโดยที่ไม่สามารถสร้างข้อผิดพลาดซ้ำในเครื่องได้ หากใครเคยมีประสบการณ์เกี่ยวกับข้อผิดพลาดนี้ฉันอยากจะรู้ว่าคุณพบอะไร

5
การติดตามสแต็กข้อยกเว้นของ Javascript
ใน Firefox ฉันสามารถติดตามสแต็กของข้อยกเว้นได้โดยใช้exception.stack. มีวิธีรับสิ่งนั้นในเบราว์เซอร์อื่นด้วยหรือไม่? แก้ไข:ฉันต้องการบันทึกการติดตามสแต็กโดยอัตโนมัติ (ถ้าเป็นไปได้) และไม่ดีบักในเวลานั้น (เช่นฉันรู้วิธีรับสแต็กแทร็กในดีบักเกอร์)

15
รับ android.content.res.Resources $ NotFoundException: ข้อยกเว้นแม้ว่าทรัพยากรจะมีอยู่ใน Android
โปรดแจ้งให้เราทราบว่าฉันทำผิดพลาดตรงไหนเพื่อรับข้อผิดพลาด ฉันกำลังสร้างแอปที่มีกิจกรรมอย่างใดอย่างหนึ่งเพื่อให้อยู่ในโหมดแนวนอนเท่านั้น ดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้ในไฟล์AndroidManifest.xml <activity android:name=".LandScapeImageActivity" android:screenOrientation="landscape"></activity> ฉันได้สร้างโฟลเดอร์เช่น / res / รูปแบบที่ดิน และเพิ่มเค้าโครงที่เรียกว่า see_today_landscape_layout ในนั้น และonCreate()ฉันได้เพิ่มสิ่งต่อไปนี้ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.see_today_landscape_layout); .... } แต่เมื่อฉันเรียกใช้แอปของฉันฉันได้รับข้อผิดพลาดต่อไปนี้ 02-06 13:46:14.358: E/AndroidRuntime(13286): FATAL EXCEPTION: main 02-06 13:46:14.358: E/AndroidRuntime(13286): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mid.kew.activities/com.mid.kew.activities.LandScapeImageActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f03002b 02-06 13:46:14.358: E/AndroidRuntime(13286): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 02-06 …

7
Python: ฉันจะรู้ได้อย่างไรว่าข้อยกเว้นใดที่อาจเกิดขึ้นจากการเรียกใช้เมธอด
มีวิธีใดที่จะทราบได้ (ณ เวลาเข้ารหัส) ซึ่งคาดว่าจะมีข้อยกเว้นใดบ้างเมื่อเรียกใช้งานโค้ด python ฉันจบลงด้วยการจับคลาส Exception พื้นฐาน 90% ของเวลาเนื่องจากฉันไม่รู้ว่าประเภทข้อยกเว้นใดที่อาจถูกโยนทิ้ง (และอย่าบอกให้ฉันอ่านเอกสารประกอบหลายครั้งข้อยกเว้นสามารถแพร่กระจายจากส่วนลึกและหลาย ๆ ครั้งที่เอกสารไม่ได้รับการอัปเดตหรือถูกต้อง) มีเครื่องมือบางอย่างในการตรวจสอบสิ่งนี้หรือไม่? (เช่นการอ่านรหัส python และ libs)?
89 python  exception 

3
จับทั่วไปสำหรับ python
ฉันมีพฤติกรรมแปลก ๆ บางอย่างที่ดูเหมือนจะทำให้เกิดข้อยกเว้นเงียบ ๆ ฉันจะเขียน try catch ทั่วไปได้อย่างไรซึ่งฉันสามารถดีบักข้อยกเว้นทั้งหมดได้อย่างไร บางสิ่งบางอย่างตามแนวของ: try: # something that fails except e: print e ข้อมูลเพิ่มเติมเกี่ยวกับปัญหาในมือโดยละเอียด: ฉันมีแอพ Django ที่บนคอมพิวเตอร์ของฉัน (Ubuntu Linux 8.10) ทำงานได้ดีทั้งผ่านรันเนอร์และ mod-python บนเซิร์ฟเวอร์ปรับใช้ (Ubuntu Linux 8.10) ทำงานได้ดีผ่านรันเนอร์ แต่ล้มเหลวผ่าน apache ใน mod-python ฉันได้ลดสาเหตุลงเป็นส่วนหนึ่งของแอปที่ใช้ Berkeley DB (bsddb.db) และคีย์รอง วิธีการโทรกลับสำหรับคีย์รองใช้การดองเพื่อจัดรูปแบบคีย์ มันล้มเหลวเมื่อฉันเรียกดองด้วยค่าเดียว อย่างไรก็ตามจะล้มเหลวเฉพาะเมื่อฉันใช้ cPickle และการใช้ pickle กับค่าเดียวกันนอกฟังก์ชันเรียกกลับก็ใช้ได้เช่นกัน ฉันแค่อยากรู้ว่าทำไม cPickle …
89 python  exception 

6
ฉันจะตรวจสอบ“ ไม่มีข้อยกเว้นเกิดขึ้น” ในการทดสอบหน่วย MSTest ได้อย่างไร
ฉันกำลังเขียนการทดสอบหน่วยสำหรับวิธีการนี้ซึ่งส่งคืน "โมฆะ" ฉันต้องการมีกรณีหนึ่งที่การทดสอบจะผ่านเมื่อไม่มีการโยนข้อยกเว้น ฉันจะเขียนใน C # ได้อย่างไร Assert.IsTrue(????) (ฉันเดาว่านี่คือวิธีที่ฉันควรตรวจสอบ แต่สิ่งที่เป็น "???") ฉันหวังว่าคำถามของฉันจะชัดเจนพอ


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