PRETTIFIES เอาต์พุตข้อยกเว้นของ Python เพื่อให้อ่านง่าย ติดตั้งด้วย
python -m pip install pretty_errors
หากคุณต้องการใช้ pretty_errors
เมื่อใดก็ตามที่คุณเรียกใช้สคริปต์ Python คุณต้องเพิ่มลงในขั้นตอนการเริ่มต้น Python ของคุณ คุณสามารถทำได้อย่างง่ายดายโดยการวิ่ง:
python -m pretty_errors
นี่เป็นวิธีที่แนะนำในการใช้ pretty_errors
; นอกเหนือจากความง่ายขึ้นและเป็นสากลการใช้มันจะหมายถึงข้อยกเว้น SyntaxError
ยังได้รับการจัดรูปแบบอย่างสวยงาม (ซึ่งไม่ทำงานหากคุณกำลังนำเข้าด้วยตนเอง pretty_errors
)
หากคุณยังไม่ได้ติดตั้งในระดับสากลคุณสามารถใช้มันในโครงการของคุณได้ง่ายๆโดยนำเข้า:
import pretty_errors
หมายเหตุคุณต้องทำงานในเทอร์มินัลที่มีความสามารถในการเอาต์พุตสีเพื่อรับเอาต์พุตสี: ใน Windows นี่หมายถึง PowerShell, CMDER ฯลฯ หากคุณต้องใช้เทอร์มินัลโมโนโครมคุณสามารถเรียกฟังก์ชัน Helper pretty_errors.mono()
ซึ่งจะตั้งค่าตัวเลือกการกำหนดค่าบางอย่างในลักษณะที่มีประโยชน์สำหรับเอาต์พุตขาวดำ
หากคุณต้องการกำหนดค่าเอาต์พุตให้ใช้ pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
ตัวอย่างเช่น:
import pretty_errors
pretty_errors . configure (
separator_character = '*' ,
filename_display = pretty_errors . FILENAME_EXTENDED ,
line_number_first = True ,
display_link = True ,
lines_before = 5 ,
lines_after = 2 ,
line_color = pretty_errors . RED + '> ' + pretty_errors . default_config . line_color ,
code_color = ' ' + pretty_errors . default_config . line_color ,
truncate_code = True ,
display_locals = True
)
pretty_errors . blacklist ( 'c:/python' )
บางครั้งมันจะเป็นไปไม่ได้ที่ pretty_errors
จะใช้ sys.excepthook
: ตัวอย่างเช่นหากคุณใช้เฟรมเวิร์กที่ติดตั้งการบันทึกของตัวเอง (เช่น uvicorn
) ในกรณีเช่นนี้คุณสามารถทำให้ pretty_errors
ขูดเอาต์พุตไปยัง stderr
แทนแทนที่ด้วยตัวเอง การโทรง่าย ๆ :
pretty_errors . replace_stderr ()
โปรดทราบว่าสิ่งนี้จะสูญเสียฟังก์ชั่นบางอย่างเนื่องจาก pretty_errors
จะสามารถเข้าถึงสิ่งที่กำลังส่งออกบนหน้าจอได้เท่านั้น API ที่ดีโดยทั่วไปจะมีวิธีโต้ตอบกับสแต็กข้อยกเว้นซึ่งจะอนุญาตให้ใช้ excepthook
: แทนที่ replace_stderr
ควรเป็นทางเลือกสุดท้าย ดูความคิดเห็นนี้สำหรับตัวอย่าง
คุณสามารถใช้ฟังก์ชั่น whitelist(path)
และ blacklist(path)
เพื่อเพิ่มเส้นทางที่จำเป็น ( whitelist
) หรือยกเว้น ( blacklist
) เฟรมด้านบนของสแต็กไม่เคยถูกแยกออก
คุณสามารถตั้งค่าการกำหนดค่าทางเลือกซึ่งถูกเรียกใช้โดยพา ธ ไปยังไฟล์รหัสของเฟรม ตัวอย่างเช่นหากคุณไม่สนใจเฟรมระบบ (ภายใต้ 'C:/Python') แต่ไม่ต้องการซ่อนไว้อย่างสมบูรณ์โดยใช้ blacklist
ที่คุณสามารถทำได้:
meh = pretty_errors . config . copy ()
meh . line_color = meh . code_color = meh . filename_color = meh . function_color = meh . line_number_color = (
pretty_errors . GREY
)
pretty_errors . pathed_config ( meh , 'c:/python' )
pretty_errors
โดยการตั้งค่าตัวแปรสภาพแวดล้อม PYTHON_PRETTY_ERRORS
เป็น 0
เช่นที่พรอมต์คำสั่ง: set PYTHON_PRETTY_ERRORS=0
การโทร pretty_errors.activate()
จะแทนที่สิ่งนี้
หากคุณต้องการเลือกใช้ pretty_errors
ให้ใช้ด้านบนและในรหัสของคุณทำการคำนวณของคุณเพื่อตรวจสอบว่าจะเรียก pretty_errors.activate()
หรือไม่
pretty_errors
เมื่อคุณเปลี่ยนเอาต์พุตไปยังไฟล์ (เพื่อเก็บบันทึกข้อผิดพลาดเป็นต้น) หากคุณต้องการทำเช่นนั้นการตั้งค่า PYTHON_PRETTY_ERRORS_ISATTY_ONLY
ถึงไม่ใช่ศูนย์จะทำให้ pretty_errors
ตรวจสอบว่ามันทำงานอยู่ในเทอร์มินัลแบบโต้ตอบและเปิดใช้งานหากเป็นเช่นนั้น set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
การตั้งค่านี้จะปิดการใช้งาน replace_stderr()
ในสถานการณ์เดียวกันเว้นแต่คุณจะเรียกมันด้วยพารามิเตอร์ force
: replace_stderr(force=True)
การโทร pretty_errors.activate()
จะแทนที่สิ่งนี้
คุณสามารถตรวจสอบ pretty_errors.terminal_is_interactive
เพื่อดูว่าเทอร์มินัลเป็นแบบโต้ตอบ ( pretty_errors
ตั้งค่านี้โดยตรวจสอบ sys.stderr.isatty()
) คุณสามารถใช้สิ่งนี้เพื่อเลือกการกำหนดค่าอื่น ตัวอย่างเช่น:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
การตั้งค่าการกำหนดค่าจะถูกเก็บไว้ใน pretty_errors.config
แม้ว่าควรตั้งค่าโดยใช้ pretty_errors.configure()
การอ้างอิงสำหรับการกำหนดค่าเริ่มต้นจะถูกเก็บไว้ใน pretty_errors.default_config
name
ฟิลด์เสริมในการจัดเก็บชื่อการกำหนดค่าใน
line_length
เอาต์พุตจะถูกห่อหุ้ม ณ จุดนี้ หากตั้งค่าเป็น 0
(ซึ่งเป็นค่าเริ่มต้น) มันจะตรงกับความกว้างของคอนโซลของคุณโดยอัตโนมัติ
full_line_newline
แทรกสายใหม่ที่ยากแม้ว่าบรรทัดจะเต็ม หาก line_length
นั้นเหมือนกับความกว้างของคอนโซลของคุณและเปิดใช้งานสิ่งนี้คุณจะเห็นเส้นใหม่สองครั้งเมื่อบรรทัดเต็มอย่างแน่นอนดังนั้นโดยปกติแล้วคุณจะตั้งค่านี้หากพวกเขาแตกต่างกัน
separator_character
ตัวละครที่ใช้ในการสร้างบรรทัดส่วนหัว ยัติภังค์ถูกใช้โดยค่าเริ่มต้น หากตั้งค่าเป็น None
หรือ ''
ส่วนหัวจะถูกปิดใช้งาน
display_timestamp
เมื่อเปิดใช้งานการประทับเวลาจะถูกเขียนขึ้นในส่วนหัวการติดตาม
timestamp_function
ฟังก์ชั่นที่เรียกว่าเพื่อสร้างการประทับเวลา ค่าเริ่มต้นคือ time.perf_counter
exception_above
เมื่อเปิดใช้งานข้อยกเว้นจะปรากฏขึ้นเหนือการติดตามสแต็ก
exception_below
เมื่อเปิดใช้งานข้อยกเว้นจะปรากฏขึ้นด้านล่างการติดตามสแต็ก
stack_depth
จำนวนสูงสุดของรายการจากการติดตามสแต็กเพื่อแสดง เมื่อ 0
จะแสดงสแต็กทั้งหมดซึ่งเป็นค่าเริ่มต้น
top_first
เมื่อเปิดใช้งานการติดตามสแต็กจะถูกย้อนกลับแสดงด้านบนของสแต็กก่อน
always_display_bottom
เมื่อเปิดใช้งาน (ซึ่งเป็นค่าเริ่มต้น) เฟรมด้านล่างของการติดตามสแต็กจะปรากฏขึ้นเสมอ
show_suppressed
เมื่อเปิดใช้งานข้อยกเว้นที่ถูกระงับทั้งหมดในการติดตามสแต็กจะปรากฏขึ้น (โดยทั่วไปจะถูกระงับเนื่องจากข้อยกเว้นข้างต้นพวกเขาได้แทนที่พวกเขา) พฤติกรรม Python ปกติคือการซ่อนพวกเขา
filename_display
ชื่อไฟล์จะแสดงอย่างไร: อาจเป็น pretty_errors.FILENAME_COMPACT
, pretty_errors.FILENAME_EXTENDED
หรือ pretty_errors.FILENAME_FULL
line_number_first
เมื่อเปิดใช้งานหมายเลขบรรทัดจะปรากฏขึ้นก่อนแทนที่จะเป็นชื่อไฟล์
display_link
เมื่อเปิดใช้งานลิงค์ถูกเขียนไว้ด้านล่างตำแหน่งข้อผิดพลาดซึ่ง VSCODE จะอนุญาตให้คุณคลิก
lines_after
, lines_before
มีกี่บรรทัดที่จะแสดงสำหรับเฟรมด้านบนก่อนและหลังบรรทัดข้อยกเว้นที่เกิดขึ้น
trace_lines_after
, trace_lines_before
มีกี่บรรทัดที่จะแสดงสำหรับเฟรมซึ่งกันและกันในการติดตามสแต็กก่อนและหลังบรรทัดมีข้อยกเว้นเกิดขึ้น
truncate_code
เมื่อเปิดใช้งานแต่ละบรรทัดของรหัสจะถูกตัดทอนให้พอดีกับความยาวของเส้น
display_locals
เมื่อเปิดใช้งานตัวแปรท้องถิ่นที่ปรากฏในรหัสเฟรมสแต็กด้านบนจะแสดงด้วยค่าของพวกเขา
display_trace_locals
เมื่อเปิดใช้งานตัวแปรท้องถิ่นที่ปรากฏในรหัสเฟรมสแต็กอื่น ๆ จะแสดงด้วยค่าของพวกเขา
truncate_locals
เมื่อเปิดใช้งานค่าของตัวแปรโลคัลที่แสดงจะถูกตัดทอนให้พอดีกับความยาวของเส้น
display_arrow
เมื่อเปิดใช้งานลูกศรจะปรากฏขึ้นสำหรับข้อผิดพลาดทางไวยากรณ์ชี้ไปที่โทเค็นที่กระทำผิด
arrow_head_character
, arrow_tail_character
อักขระที่ใช้ในการวาดลูกศรซึ่งชี้ไปที่ข้อผิดพลาดทางไวยากรณ์
inner_exception_message
ข้อความที่แสดงเมื่อมีข้อยกเว้นหนึ่งเกิดขึ้นภายในอีกข้อยกเว้นทั้งสองข้อยกเว้น ค่าเริ่มต้นคือ None
ซึ่งจะแสดงข้อยกเว้นที่คั่นด้วยส่วนหัว หากคุณต้องการเลียนแบบพฤติกรรมที่ไม่ใช่ค่าเริ่มต้นให้ใช้สิ่งนี้:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
โปรดทราบว่าหากคุณใช้ top_first
การสั่งซื้อจะกลับรายการดังนั้นคุณควรใช้ข้อความเช่นนี้แทน:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
ค่าเริ่มต้นเป็น False
เมื่อตั้งค่าเป็น True
จะมีการเขียนส่วนหัวก่อนที่ inner_exception_message
prefix
สตริงข้อความซึ่งแสดงที่ด้านบนของรายงานด้านล่างส่วนหัว
infix
สตริงข้อความซึ่งแสดงระหว่างแต่ละเฟรมของสแต็ก
postfix
สตริงข้อความซึ่งแสดงที่ด้านล่างของรายงานข้อยกเว้น
reset_stdout
เมื่อเปิดใช้งานลำดับการหลบหนีรีเซ็ตจะถูกเขียนไปยัง stdout เช่นเดียวกับ stderr; เปิดสิ่งนี้หากคอนโซลของคุณถูกทิ้งไว้ด้วยสีที่ไม่ถูกต้อง
สตริงสีเหล่านี้จะถูกส่งออกก่อนที่ส่วนที่เกี่ยวข้องของข้อความข้อยกเว้น คุณอาจรวมสตริงลำดับที่ไม่ใช่การหลบหนีหากคุณต้องการ หากคุณไม่มีเทอร์มินัลที่รองรับเอาต์พุตสีหรือเพียงแค่ต้องการรวมการแบ่งเขตเพิ่มเติม
header_color
Escape Sequence เพื่อตั้งค่าสีส่วนหัว
timestamp_color
Escape Sequence เพื่อตั้งค่าสีเวลา
exception_color
Escape Sequence เพื่อตั้งค่าสียกเว้น
exception_arg_color
Escape Sequence เพื่อตั้งค่าสีข้อยกเว้น
exception_file_color
Escape Sequence เพื่อตั้งค่าสีของชื่อไฟล์ในข้อยกเว้น (ตัวอย่างเช่นใน filenotfounderror)
filename_color
Escape Sequence เพื่อตั้งค่าสีชื่อไฟล์
line_number_color
Escape Sequence เพื่อตั้งค่าสีหมายเลขบรรทัด
function_color
Escape Sequence เพื่อตั้งค่าสีฟังก์ชั่น
link_color
Escape Sequence เพื่อตั้งค่าสีลิงค์
line_color
Escape Sequence เพื่อตั้งค่าสีของบรรทัดของรหัสซึ่งทำให้เกิดข้อยกเว้น
code_color
Escape Sequence เพื่อตั้งค่าสีของบรรทัดที่แสดงอื่น ๆ ของรหัส
arrow_head_color
, arrow_tail_color
Escape Sequence เพื่อตั้งค่าสีของลูกศรซึ่งชี้ไปที่ข้อผิดพลาดทางไวยากรณ์
syntax_error_color
Escape Sequence เพื่อตั้งค่าสีของโทเค็นข้อผิดพลาดทางไวยากรณ์
local_name_color
Escape Sequence เพื่อตั้งค่าสีของชื่อตัวแปรท้องถิ่น
local_value_color
Escape Sequence เพื่อตั้งค่าสีของค่าตัวแปรท้องถิ่น
local_len_color
Escape Sequence เพื่อตั้งค่าสีของความยาวค่าท้องถิ่นเมื่อถูกตัดทอน
pretty_errors
มีค่าคงที่ลำดับในตัวที่คุณสามารถใช้เมื่อตั้งค่าสีเหล่านี้:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
สำหรับแต่ละสีมีตัวแปร BRIGHT_
ที่ตรงกัน (เช่น pretty_errors.BRIGHT_RED
) รวมถึงตัวแปร _BACKGROUND
เพื่อตั้งค่าสีพื้นหลัง (เช่น pretty_errors.RED_BACKGROUND
)
ตัวอย่างเช่น:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
สำหรับการปรับแต่งที่กว้างขวางที่สุด (สั้น ๆ จากการฟอร์กแพ็คเกจ) คุณสามารถแทนที่คลาส ExceptionWriter
ของผู้เริ่มต้นเพื่อให้คุณสามารถปรับแต่งเอาต์พุตตามที่คุณต้องการ โดยทั่วไปคุณจะต้องแทนที่วิธี write_
ตัวอย่างเช่น:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
เรียกใช้ help(pretty_errors.ExceptionWriter)
ในล่าม Python สำหรับรายละเอียดเพิ่มเติม