ห่อและส่งข้อผิดพลาดต่อ
เพิ่มบริบทขณะที่ข้อผิดพลาดส่งต่อขึ้นไป
ห่อและส่งข้อผิดพลาดต่อ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อผิดพลาดเดินทางขึ้นไป
เมื่อฟังก์ชันไม่สามารถจัดการความล้มเหลวด้วยตนเองได้ ฟังก์ชันจะส่งข้อผิดพลาดไปยังผู้เรียก ระหว่างทางคุณสามารถปรับเปลี่ยนหรือ ส่งข้อผิดพลาดซ้ำ ได้
ส่งข้อผิดพลาดซ้ำด้วย try
วิธีส่งข้อผิดพลาดซ้ำที่ง่ายที่สุดคือ try มันส่งต่อข้อผิดพลาดเดิมไปยังผู้เรียกโดยไม่เปลี่ยนแปลง ดังนั้นค่าเดิมจึงถูกส่งต่อขึ้นไปเรื่อย ๆ
const data = try readFile(path);จับแล้วส่งคืน
หากต้องการแปลงข้อผิดพลาด ให้ใช้ catch แล้วส่งคืนข้อผิดพลาดอื่น วิธีนี้จะแทนที่ข้อผิดพลาดระดับล่างด้วยข้อผิดพลาดที่เหมาะกับส่วนติดต่อของคุณ
const f = open(path) catch return error.ConfigMissing;แมปข้อผิดพลาดด้วย switch
ใช้ catch ร่วมกับ switch เพื่อแปลงข้อผิดพลาดต้นทางแต่ละรายการให้เป็นข้อผิดพลาดที่เข้าใจได้ชัดเจนขึ้น พร้อมส่งต่อรายการที่เหลือโดยไม่เปลี่ยนแปลง
parse(s) catch |e| switch (e) {
error.Empty => return error.NoInput,
else => return e,
};Zig ไม่มีร่องรอยการเรียกซ้อนเป็นค่า
ข้อผิดพลาดใน Zig เป็นเพียงแท็ก ไม่ใช่ออบเจ็กต์ที่เก็บบริบท หากต้องการเพิ่มรายละเอียด คุณต้องส่งคืนข้อผิดพลาดของคุณเองที่ สื่อความหมายได้ชัดเจนกว่า
แนบบริบทแยกต่างหาก
เนื่องจากแท็กข้อผิดพลาดไม่มีข้อความ ให้ บันทึก รายละเอียดไว้ตรงจุดที่เกิดความล้มเหลว แล้วส่งคืนข้อผิดพลาดระดับสูงให้ผู้เรียก
open(path) catch |e| {
std.log.err("open {s}: {}", .{ path, e });
return error.LoadFailed;
};ขยายชุดข้อผิดพลาด
หากคุณส่งคืนข้อผิดพลาดใหม่ ชุดข้อผิดพลาด ของฟังก์ชันต้องมีข้อผิดพลาดนั้นอยู่ด้วย ชุด !T ที่อนุมานจะขยายให้ครอบคลุมทุกสิ่งที่คุณส่งคืน
fn load() !Config {
return open(".cfg") catch error.LoadFailed;
}เก็บไว้หรือแทนที่
ตัดสินใจในแต่ละชั้น: ส่งต่อข้อผิดพลาดเดิมทุกประการด้วย try หรือแทนที่ด้วยข้อผิดพลาดที่เหมาะกับผู้เรียกมากกว่า ทั้งสองวิธีใช้ได้
รักษาขอบเขตให้สะอาด
ที่ขอบเขตของโมดูล ให้แปลงข้อผิดพลาดภายในเป็น ชุด สาธารณะขนาดเล็ก จากนั้นผู้เรียกจะพึ่งพาชื่อที่คงที่ ไม่ใช่รายละเอียดภายในของคุณ
ใช้คู่กับ errdefer
เมื่อคุณส่งข้อผิดพลาดซ้ำ errdefer ใด ๆ ที่อยู่ในขอบเขตนั้นจะยังทำงานก่อน ดังนั้นคุณจึงย้อนคืนทรัพยากรและแปลงข้อผิดพลาดได้ในเส้นทางเดียว
ความล้มเหลวที่มีความหมาย
การห่อหุ้มข้อผิดพลาดเปลี่ยนสาเหตุดิบให้เป็นข้อความที่เหมาะกับโดเมนของคุณ ผู้เรียกจะเห็น ข้อผิดพลาด ที่ชัดเจนแทนรายละเอียดภายใน
ตรวจสอบอย่างรวดเร็ว
คุณต้องการแทนที่ error.NotFound ระดับล่างด้วย error.ConfigMissing ของคุณเองสำหรับผู้เรียก วิธีใดใช้ได้
สรุป
คุณส่งข้อผิดพลาดซ้ำด้วย try แปลงข้อผิดพลาดผ่าน catch และ switch บันทึกบริบท และขยายชุดข้อผิดพลาดเพื่อให้ความล้มเหลวยังคงมีความหมาย ✅
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “ห่อและส่งข้อผิดพลาดต่อ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ห่อและส่งข้อผิดพลาดต่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ห่อและส่งข้อผิดพลาดต่อ”
เพิ่มบริบทขณะที่ข้อผิดพลาดส่งต่อขึ้นไป คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ห่อและส่งข้อผิดพลาดต่อ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กู้คืนด้วย catch
- เลือกตามข้อผิดพลาดเฉพาะ
- errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว
- ห่อและส่งข้อผิดพลาดต่อ