เรียนรู้ที่จะถอดรหัสข้อความแสดงข้อผิดพลาดแทนที่จะปิดมันทิ้ง: ชนิด ไฟล์ บรรทัด และสแตกเทรซ
เปิดบทเรียนนี้ใน Kodokonข้อผิดพลาดไม่ใช่บทลงโทษ คอมพิวเตอร์ไม่ได้ตัดสินคุณและไม่ได้หัวเราะเยาะคุณ มันแค่พบว่ามันไม่รู้ว่าต้องทำอะไรต่อ แล้วมันก็บอกคุณว่าเพราะอะไร มันทำงานเหมือน GPS ที่ประกาศว่า "กำลังคำนวณเส้นทางใหม่" เป๊ะ ๆ นั่นไม่ใช่การตำหนิ นั่นคือข้อมูล สัญชาตญาณของมือใหม่คือปิดหน้าต่างสีแดงทิ้งโดยไม่อ่าน ส่วนสัญชาตญาณของนักพัฒนาคืออ่านมันช้า ๆ จนจบ นี่มักเป็นช่วงเวลาเดียวที่เครื่องพูดกับคุณเป็นคำพูดตรง ๆ
ข้อความแสดงข้อผิดพลาดเกือบทุกข้อความบรรจุข้อมูลชุดเดียวกัน ชนิด ของข้อผิดพลาด ซึ่งจัดมันเข้าตระกูลใหญ่ ๆ ข้อความ ซึ่งอธิบายในหนึ่งประโยคว่าอะไรติดขัด ไฟล์ ที่เกี่ยวข้องและ หมายเลขบรรทัด ซึ่งบอกคุณอย่างชัดเจนว่าต้องไปดูตรงไหน และบางครั้งก็มี สแตกเทรซ (stack trace): รายการขั้นตอนที่โปรแกรมเดินผ่านมาก่อนจะพังลง
Traceback (most recent call last):
File "shopping.py", line 12, in <module>
total = price * quantity
NameError: name 'quantity' is not definedในตัวอย่างข้างบน ทุกอย่างถูกบอกไว้หมดแล้ว ไฟล์คือ shopping.py บรรทัดคือบรรทัดที่ 12 ชนิดคือ NameError และข้อความบอกว่า name 'quantity' is not defined พูดง่าย ๆ ก็คือ ที่บรรทัดที่ 12 คุณกำลังใช้ตัวแปร quantity ที่คุณไม่เคยสร้างขึ้นมา หรือไม่ก็สะกดชื่อมันผิด ไม่ต้องสืบสวนอะไรซับซ้อนเลย เพราะข้อความนั้นบรรจุคำตอบไว้อยู่แล้ว
สแตกเทรซของ Python อ่าน จากล่างขึ้นบน: บรรทัดสุดท้ายบอกชนิดและคำอธิบาย ส่วนที่อยู่เหนือขึ้นไปติด ๆ กันคือไฟล์และบรรทัดที่เป็นต้นเหตุ เมื่อเทรซยาวมาก ให้มองหาบรรทัดแรกที่กล่าวถึงไฟล์ของ คุณเอง บรรทัดที่ชี้ไปยังไฟล์แปลกหน้าชื่อประหลาด ๆ เป็นของไลบรารีที่คุณใช้อยู่ 99% ของเวลา มันไม่ใช่ตัวที่มีบัก แต่เป็นวิธีที่คุณเรียกใช้มันต่างหาก
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
at showProfile (app.js:24:18)
at start (app.js:41:3)มีถ้อยคำอยู่ไม่กี่แบบที่โผล่มาซ้ำแล้วซ้ำอีก และคุ้มมากที่จะจดจำมันไว้ not defined หมายความว่าชื่อที่คุณใช้ไม่มีอยู่ ณ จุดนั้น undefined หมายความว่าสิ่งนั้นมีอยู่แต่ไม่มีค่าใด ๆ อยู่ข้างใน unexpected หมายความว่าโปรแกรมกำลังรออย่างอื่นอยู่ โดยทั่วไปคือวงเล็บหรือเครื่องหมายอัญประกาศที่ลืมปิด permission denied ชี้ไปที่ปัญหาเรื่องสิทธิ์ ไม่ใช่ปัญหาของโค้ด และ no such file or directory หมายความว่าเส้นทางที่คุณเขียนไม่ได้นำไปสู่ที่ไหนเลย
not defined มักหมายความว่าอะไร?