Kodokon kodokon.com

อ่านและทำความเข้าใจข้อความแสดงข้อผิดพลาด

เรียนรู้ที่จะถอดรหัสข้อความแสดงข้อผิดพลาดแทนที่จะปิดมันทิ้ง: ชนิด ไฟล์ บรรทัด และสแตกเทรซ

8 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

ข้อผิดพลาดไม่ใช่บทลงโทษ คอมพิวเตอร์ไม่ได้ตัดสินคุณและไม่ได้หัวเราะเยาะคุณ มันแค่พบว่ามันไม่รู้ว่าต้องทำอะไรต่อ แล้วมันก็บอกคุณว่าเพราะอะไร มันทำงานเหมือน GPS ที่ประกาศว่า "กำลังคำนวณเส้นทางใหม่" เป๊ะ ๆ นั่นไม่ใช่การตำหนิ นั่นคือข้อมูล สัญชาตญาณของมือใหม่คือปิดหน้าต่างสีแดงทิ้งโดยไม่อ่าน ส่วนสัญชาตญาณของนักพัฒนาคืออ่านมันช้า ๆ จนจบ นี่มักเป็นช่วงเวลาเดียวที่เครื่องพูดกับคุณเป็นคำพูดตรง ๆ

ข้อความแสดงข้อผิดพลาดเกือบทุกข้อความบรรจุข้อมูลชุดเดียวกัน ชนิด ของข้อผิดพลาด ซึ่งจัดมันเข้าตระกูลใหญ่ ๆ ข้อความ ซึ่งอธิบายในหนึ่งประโยคว่าอะไรติดขัด ไฟล์ ที่เกี่ยวข้องและ หมายเลขบรรทัด ซึ่งบอกคุณอย่างชัดเจนว่าต้องไปดูตรงไหน และบางครั้งก็มี สแตกเทรซ (stack trace): รายการขั้นตอนที่โปรแกรมเดินผ่านมาก่อนจะพังลง

PYTHON
Traceback (most recent call last):
  File "shopping.py", line 12, in <module>
    total = price * quantity
NameError: name 'quantity' is not defined
ข้อความจาก Python: ไฟล์ บรรทัดที่ 12 ชนิด NameError และคำอธิบายของมัน

ในตัวอย่างข้างบน ทุกอย่างถูกบอกไว้หมดแล้ว ไฟล์คือ shopping.py บรรทัดคือบรรทัดที่ 12 ชนิดคือ NameError และข้อความบอกว่า name 'quantity' is not defined พูดง่าย ๆ ก็คือ ที่บรรทัดที่ 12 คุณกำลังใช้ตัวแปร quantity ที่คุณไม่เคยสร้างขึ้นมา หรือไม่ก็สะกดชื่อมันผิด ไม่ต้องสืบสวนอะไรซับซ้อนเลย เพราะข้อความนั้นบรรจุคำตอบไว้อยู่แล้ว

สแตกเทรซของ Python อ่าน จากล่างขึ้นบน: บรรทัดสุดท้ายบอกชนิดและคำอธิบาย ส่วนที่อยู่เหนือขึ้นไปติด ๆ กันคือไฟล์และบรรทัดที่เป็นต้นเหตุ เมื่อเทรซยาวมาก ให้มองหาบรรทัดแรกที่กล่าวถึงไฟล์ของ คุณเอง บรรทัดที่ชี้ไปยังไฟล์แปลกหน้าชื่อประหลาด ๆ เป็นของไลบรารีที่คุณใช้อยู่ 99% ของเวลา มันไม่ใช่ตัวที่มีบัก แต่เป็นวิธีที่คุณเรียกใช้มันต่างหาก

JAVASCRIPT
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
    at showProfile (app.js:24:18)
    at start (app.js:41:3)
ตรรกะเดียวกันในคอนโซลของเบราว์เซอร์: ไฟล์ app.js บรรทัดที่ 24 คอลัมน์ที่ 18

มีถ้อยคำอยู่ไม่กี่แบบที่โผล่มาซ้ำแล้วซ้ำอีก และคุ้มมากที่จะจดจำมันไว้ not defined หมายความว่าชื่อที่คุณใช้ไม่มีอยู่ ณ จุดนั้น undefined หมายความว่าสิ่งนั้นมีอยู่แต่ไม่มีค่าใด ๆ อยู่ข้างใน unexpected หมายความว่าโปรแกรมกำลังรออย่างอื่นอยู่ โดยทั่วไปคือวงเล็บหรือเครื่องหมายอัญประกาศที่ลืมปิด permission denied ชี้ไปที่ปัญหาเรื่องสิทธิ์ ไม่ใช่ปัญหาของโค้ด และ no such file or directory หมายความว่าเส้นทางที่คุณเขียนไม่ได้นำไปสู่ที่ไหนเลย

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. ส่วนไหนของข้อความแสดงข้อผิดพลาดที่บอกคุณว่าต้องไปดูตรงไหนก่อน?
    • ชื่อไฟล์และหมายเลขบรรทัด
    • สีของตัวอักษรบนหน้าจอ
    • ความยาวทั้งหมดของข้อความ
    • ชื่อระบบปฏิบัติการของคุณ
  2. สแตกเทรซของ Python อ่านไปในทิศทางไหน?
    • จากบนลงล่าง: บรรทัดแรกให้คำตอบ
    • จากล่างขึ้นบน: บรรทัดสุดท้ายให้ชนิดและคำอธิบาย
    • ทางไหนก็ได้ มันเป็นแค่ของประดับ
  3. ข้อผิดพลาดที่มีคำว่า not defined มักหมายความว่าอะไร?
    • ชื่อที่คุณใช้ไม่มีอยู่ ณ จุดนั้นของโปรแกรม
    • ไฟล์ใหญ่เกินกว่าจะเปิดได้
    • การเชื่อมต่ออินเทอร์เน็ตถูกตัด