يثير مخرجات استثناء بيثون لجعله مقروءًا. تثبيته مع
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 ، وما إلى ذلك إذا كان يجب عليك استخدام محطة أحادية اللون ، فيمكنك الاتصال بوظيفة المساعد 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
لن تمكن إلا من الوصول إلى ما يجري الإخراج على الشاشة ، بدلاً من ذلك تتبع المكدس بالكامل. سيكون لدى واجهة برمجة تطبيقات جيدة طريقة للتفاعل مع مكدس الاستثناء ، والتي ستسمح باستخدام 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
عند تمكين طابع زمني مكتوب في رأس Traceback.
timestamp_function
وظيفة استدعاء لإنشاء الطابع الزمني. الافتراضي هو time.perf_counter
.
exception_above
عند تمكين ، يتم عرض الاستثناء فوق تتبع المكدس.
exception_below
عند تمكين ، يتم عرض الاستثناء أسفل تتبع المكدس.
stack_depth
الحد الأقصى لعدد الإدخالات من تتبع المكدس لعرضه. عندما يتم عرض 0
المكدس بأكمله ، وهو الافتراضي.
top_first
عند تمكين ، سيتم عكس تتبع المكدس ، مع عرض الجزء العلوي من المكدس أولاً.
always_display_bottom
عند تمكين (وهو الافتراضي) ، سيتم دائمًا عرض الإطار السفلي لتتبع المكدس.
show_suppressed
عند تمكين جميع الاستثناءات المكبوتة في تتبع المكدس ، سيتم عرضها (عادةً ما يتم قمعها لأن استثناءً من فوقها قد استبدلها). سلوك الثعبان الطبيعي هو إخفاءهم.
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
تسلسل الهروب لضبط لون الرأس.
timestamp_color
التسلسل الهروب لضبط لون الطابع الزمني.
exception_color
التسلسل الهروب لضبط لون الاستثناء.
exception_arg_color
التسلسل الهروب لضبط ملونة الحجج الاستثناء.
exception_file_color
تسلسل الهروب لتعيين لون الأسماء في الاستثناءات (على سبيل المثال ، في FileNotfounderror).
filename_color
التسلسل الهروب لتعيين لون اسم الملف.
line_number_color
تسلسل الهروب لضبط لون رقم الخط.
function_color
تسلسل الهروب لضبط لون الوظيفة.
link_color
التسلسل الهروب لضبط لون الارتباط.
line_color
التسلسل الهروب لتعيين لون خط الكود الذي تسبب في الاستثناء.
code_color
التسلسل الهروب لتعيين لون الأسطر الأخرى المعروضة من التعليمات البرمجية.
arrow_head_color
، arrow_tail_color
التسلسل الهروب لتعيين لون السهم الذي يشير إلى أخطاء بناء الجملة.
syntax_error_color
التسلسل الهروب لتعيين لون رمز خطأ بناء الجملة.
local_name_color
التسلسل الهروب لتعيين لون الأسماء المتغيرة المحلية.
local_value_color
التسلسل الهروب لتعيين لون القيم المتغيرة المحلية.
local_len_color
تسلسل الهروب لتعيين لون طول القيمة المحلية عند اقتطاع المحلية.
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 لمزيد من التفاصيل.