Pep8

PEP หรือ Python Enhancement Proposal คือข้อเขียน/ข้อเสนอโครงการสำหรับปรับปรุงเพิ่มความสามารถ Python ให้ดีขึ้น โดยที่ PEP 8 นั้นเป็นข้อเขียนสำหรับ coding standard ของ Python ที่เราควรยึดถือ

แน่นอนว่าเราควรเขียน code ตาม coding standard ที่วางไว้ แต่บางครั้งก็มีพลาดบ้าง เราสามารถเรียกโปรแกรม pep8 เพื่อตรวจสอบการเขียนได้ครับ

ก่อนอื่น (ฝั่ง Linux) ใช้ apt-get เพื่อดาวน์โหลด pep8 เรียบร้อยแล้วหาไฟล์ script.py ที่เราต้องการตรวจ แล้วสั่ง

$ pep8 script.py

สำหรับฝั่ง Windows ที่ไม่มี apt-get ก็สามารถใช้โปรแกรมนี้ได้เช่นกัน โดยการดาวน์โหลดไฟล์ pep8.py จาก GitHub แต่เวลาจะสั่งงานจะยุ่งยากกว่าเดิมเล็กน้อย ดังนี้

$ python pep8.py script.py

และต้องอย่าลืม copy ไฟล์ pep8.py ไปไว้ยังโฟลเดอร์เดียวกันกับไฟล์ที่ต้องการตรวจสอบด้วยครับ


หลังจากสั่งตรวจสอบไฟล์ script.py แล้ว ถ้าเราเขียนได้เรียบร้อยดีไม่มีปัญหา โปรแกรมจะไม่พิมพ์อะไรออกมาเลย (ตามสไตล์ของโปรแกรม Unix) แต่ถ้ายังมีรูปแบบการพิมพ์ที่ไม่ได้มาตรฐานอยู่ โปรแกรมจะพิมพ์ผลลัพท์ออกมาในรูปแบบนี้

[script.py]:[row]:[col]: [error type][error code] [description of error]

เช่น

$ pep8 script.py
script.py:5:1: W191 indentation contains tabs
script.py:9:43: E225 missing whitespace around operator
script.py:21:1: E302 expected 2 blank lines, found 1
script.py:42:80: E501 line too long (80 characters)

ทั้งนี้ เราอาจเห็นว่า error มีน้อย นั่นก็เพราะว่ามันจะแสดงข้อผิดพลาดที่ซ้ำๆ กัน (อย่างเช่นการใช้ tab) เพียงแค่ครั้งแรกครั้งเดียวครับ


เมื่อต้องการ option เพิ่ม เราสามารถขอดู help ได้เช่นโปรแกรม Unix ทั่วไป

$ pep8 -h

option ที่สำคัญได้แก่

  • -v พิมพ์สถานะการทำงานออกมาเรื่อยๆ
  • -q แสดงแค่ชื่อไฟล์ที่มีข้อผิดพลาด มักใช้ในกรณี test หลายๆ ไฟล์
  • -r แสดงจุดที่ผิดพลาดทั้งหมด ไม่ใช่แค่ครั้งแรกที่เจอ
  • --show-source แสดง code ต้นฉบับด้วยเลยว่าผิดตรงไหน
  • --show-pep8 แสดงข้อแนะนำจาก PEP 8 ว่าควรเขียน code อย่างไร
  • --count นับว่าเขียนผิดทั้งหมดกี่จุด

อย่างไรก็ดี พึงระลึกไว้เสมอว่า pep8 เป็นเครื่องมือตรวจสอบความถูกต้องของ coding standard เท่านั้น code ที่เขียนผิดจน run ไม่ผ่านอาจไม่แสดง error ใน pep8 เลยก็ได้ครับ

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus