Traceback - چاپ یا بازیابی یک ردیابی پشته

ساخت وبلاگ

این ماژول یک رابط استاندارد برای استخراج ، قالب و چاپ آثار پشته از برنامه های پایتون فراهم می کند. این دقیقاً از رفتار مترجم پایتون هنگام چاپ ردیابی پشته تقلید می کند. این زمانی مفید است که می خواهید آثار پشته را تحت کنترل برنامه چاپ کنید ، مانند "بسته بندی" در اطراف مترجم.

ماژول از اشیاء Traceback استفاده می کند - این نوع شیء است که در متغیر sys. last_traceback ذخیره می شود و به عنوان سومین مورد از sys. exc_info () باز می گردد.

ماژول توابع زیر را تعریف می کند:

ردیابی. print_tb (سل ، حد = هیچ ، پرونده = هیچ)

اگر محدودیت مثبت است ، برای محدود کردن ورودی های ردیابی پشته از Traceback Object Tb (شروع از قاب تماس گیرنده) چاپ کنید. در غیر این صورت ، آخرین ورودی های ABS (حد) را چاپ کنید. اگر محدودیت حذف نشده باشد یا هیچ کدام ، همه ورودی ها چاپ می شوند. اگر پرونده حذف نشده باشد یا هیچ کدام ، خروجی به sys. stderr می رود. در غیر این صورت باید برای دریافت خروجی یک فایل باز یا شیء مانند پرونده باشد.

تغییر در نسخه 3. 5: پشتیبانی از حد منفی اضافه شده است.

اطلاعات استثناء و ورودی های ردیابی پشته را از Traceback Object tb به پرونده چاپ کنید. این با روش های زیر با print_tb () متفاوت است:

اگر سل هیچ کدام نباشد ، یک ردیاب هدر را چاپ می کند (آخرین تماس اخیر آخرین):

این نوع و مقدار استثنا را بعد از ردیابی پشته چاپ می کند

اگر نوع (مقدار) syntaxerror باشد و مقدار آن از قالب مناسب برخوردار باشد ، خطی را چاپ می کند که خطای نحوی با یک سرپرست رخ داده است که نشان دهنده موقعیت تقریبی خطا است.

از آنجا که Python 3. 10 ، به جای عبور از مقدار و سل ، می توان یک شیء استثنا را به عنوان اولین استدلال منتقل کرد. اگر ارزش و سل ارائه شود ، اولین استدلال به منظور تأمین سازگاری به عقب نادیده گرفته می شود.

آرگومان محدودیت اختیاری همان معنای print_tb () را دارد. اگر زنجیره ای صحیح باشد (پیش فرض) ، سپس استثنائات زنجیر شده (ویژگی های __cause__ یا __context__ استثناء) نیز چاپ می شود ، مانند خود مترجم هنگام چاپ یک استثناء نامحدود.

در نسخه 3. 5 تغییر یافته است: آرگومان etype از نوع مقدار نادیده گرفته و استنباط می شود.

در نسخه 3. 10 تغییر یافته است: پارامتر Etype به EXC تغییر نام داده است و اکنون فقط موقعیتی است.

این یک shorthand برای print_exception (*sys. exc_info () ، حد ، پرونده ، زنجیره ای) است.

ردیابی. print_last (حد = هیچ ، پرونده = هیچ ، زنجیره ای = درست)

این یک shorthand برای print_exception است (sys. last_type ، sys. last_value ، sys. last_traceback ، حد ، پرونده ، زنجیره ای). به طور کلی فقط پس از رسیدن به یک استثناء به یک فوریت تعاملی کار می کند (به SYS. LAST_TYPE مراجعه کنید).

ردیابی. print_stack (f = none ، limit = none ، file = none)

اگر محدودیت مثبت باشد ، برای محدود کردن ورودی های ردیابی پشته (شروع از نقطه دعوت) چاپ کنید. در غیر این صورت ، آخرین ورودی های ABS (حد) را چاپ کنید. اگر محدودیت حذف نشده باشد یا هیچ کدام ، همه ورودی ها چاپ می شوند. آرگومان F اختیاری می تواند برای مشخص کردن یک قاب پشته جایگزین برای شروع استفاده شود. آرگومان فایل اختیاری همان معنای print_tb () را دارد.

تغییر در نسخه 3. 5: پشتیبانی از حد منفی اضافه شده است.

یک شیء Stacksummary را نشان می دهد که لیستی از ورودی های ردیابی پشته "از پیش پردازش شده" را که از Traceback Object Tb استخراج شده است ، نشان می دهد. برای قالب بندی متناوب آثار پشته مفید است. آرگومان محدودیت اختیاری همان معنای print_tb () را دارد. ورود به ردیابی پشته "از پیش پردازش شده" یک شیء فریمر است که حاوی ویژگی های نام ، لباس ، نام ، نام و خط است که اطلاعاتی را که معمولاً برای ردیابی پشته چاپ می شود ، نشان می دهد. این خط رشته ای با فضای سفید پیشرو و دنباله دار است. اگر منبع در دسترس نباشد ، هیچ کدام نیست.

ردیابی. Extract_stack (f = هیچ ، حد = هیچ)

ردیابی خام را از قاب پشته فعلی استخراج کنید. مقدار بازگشت دارای همان قالب برای Extract_TB () است. آرگومان های اختیاری F و Limit همان معنای Print_Stack () را دارند.

ردیابی. format_list (استخراج شده_ لیست)

با توجه به لیستی از tuples یا اشیاء framesummary که توسط Extract_TB () یا Extract_stack () بازگردانده شده است ، لیستی از رشته های آماده برای چاپ را برگردانید. هر رشته در لیست حاصل با همان مورد با همان فهرست در لیست آرگومان مطابقت دارد. هر رشته در یک خط جدید به پایان می رسد. این رشته ها ممکن است شامل خطوط داخلی داخلی نیز باشد ، برای مواردی که خط متن منبع آنها هیچ کدام نیست.

ردیابی. format_exception_only (exc ، / [، مقدار]))

بخشی از استثناء یک ردیابی را با استفاده از یک مقدار استثنائی مانند داده شده توسط sys. last_value قالب بندی کنید. مقدار بازگشت لیستی از رشته ها است که هر یک در یک خط جدید به پایان می رسد. به طور معمول ، این لیست شامل یک رشته واحد است. با این حال ، برای استثنائات SyntaxError ، شامل چندین خط است که (هنگام چاپ) اطلاعات مفصلی را در مورد محل خطای نحوی نشان می دهد. پیام نشان می دهد که کدام استثناء اتفاق افتاده است ، آخرین رشته در لیست است.

از آنجا که Python 3. 10 ، به جای عبور از مقدار ، می توان یک شیء استثنا را به عنوان اولین استدلال منتقل کرد. در صورت ارائه ارزش ، اولین استدلال به منظور تأمین سازگاری به عقب نادیده گرفته می شود.

در نسخه 3. 10 تغییر یافته است: پارامتر Etype به EXC تغییر نام داده است و اکنون فقط موقعیتی است.

یک ردیابی پشته و اطلاعات استثنا را قالب بندی کنید. آرگومان ها همان معنایی را دارند که آرگومان های مربوطه برای print_exception (). مقدار برگشتی لیستی از رشته ها است که هر یک به یک خط جدید پایان می یابد و برخی از آنها حاوی خطوط جدید داخلی هستند. هنگامی که این خطوط به هم پیوسته و چاپ می شوند ، دقیقاً همان متن چاپ می شود مانند print_exception ().

در نسخه 3. 5 تغییر یافته است: آرگومان etype از نوع مقدار نادیده گرفته و استنباط می شود.

تغییر در نسخه 3. 10: رفتار و امضای این عملکرد برای مطابقت با print_exception () اصلاح شد.

این مانند print_exc (حد) است اما به جای چاپ به یک پرونده ، رشته ای را برمی گرداند.

ردیابی. format_tb (سل ، حد = هیچ)

یک کوتاه برای Format_List (Extract_TB (TB ، Limit)).

ردیابی. format_stack (f = هیچ ، حد = هیچ)

یک کوتاه برای Format_List (Extract_Stack (F ، Limit)).

ردیابی. clear_frames (سل)

متغیرهای محلی تمام فریم های پشته را در یک Traceback TB با فراخوانی روش CLEAR () هر شیء فریم پاک می کند.

جدید در نسخه 3. 4.

یک پشته را به دنبال F. F_BACK از قاب داده شده پیاده روی کنید و برای هر فریم قاب و شماره خط را به دست آورید. اگر F هیچ کدام نیست ، از پشته فعلی استفاده می شود. این یاور با stacksummary. extract () استفاده می شود.

جدید در نسخه 3. 5.

به دنبال TB_next با استفاده از TB_NEXT با استفاده از قاب و شماره خط برای هر فریم ، یک ردیابی پیاده روی کنید. این یاور با stacksummary. extract () استفاده می شود.

جدید در نسخه 3. 5.

ماژول کلاسهای زیر را نیز تعریف می کند:

TraceBACKexception اشیاء

جدید در نسخه 3. 5.

اشیاء tracebackexception از استثنائات واقعی برای گرفتن داده ها برای چاپ بعدی به روشی سبک وزن ایجاد می شوند.

ردیابی کلاس. TraceBACKEXECATESS (EXC_TYPE ، EXC_VALUE ، EXC_TRACEBACK ، * ، حد = هیچ ، lookup_lines = true ، capture_locals = false ، compact = false) ¶

یک استثنا را برای ارائه بعدی ضبط کنید. محدود ، lookup_lines و capture_locals مانند کلاس stacksummary است.

اگر جمع و جور صحیح باشد ، فقط داده هایی که توسط روش فرمت TraceBakKexception لازم است در ویژگی های کلاس ذخیره می شوند. به طور خاص ، قسمت __context__ فقط در صورتی محاسبه می شود که __cause__ هیچ کدام نیست و __ssuppress_context__ نادرست است.

توجه داشته باشید که وقتی افراد محلی اسیر می شوند ، در ردیاب نیز نشان داده می شوند.

TraceBakexception از اصلی __cause__.

TraceBakexception از __context__ اصلی.

مقدار __spress_context__ از استثناء اصلی.

مقدار __notes__ از استثناء اصلی ، یا هیچ کدام در صورتی که استثنائی نداشته باشد. اگر هیچ کدام نباشد ، پس از رشته استثنا در ردیابی فرمت شده است.

جدید در نسخه 3. 11.

stacksummary نماینده ردیابی.

کلاس Traceback اصلی.

برای خطاهای نحوی - نام پرونده که در آن خطا رخ داده است.

برای خطاهای نحوی - شماره خط که در آن خطا رخ داده است.

برای خطاهای نحوی - متنی که در آن خطا رخ داده است.

برای خطاهای نحوی - جبران به متن که در آن خطا رخ داده است.

برای خطاهای نحوی - پیام خطای کامپایلر.

classmethod from_exception (exc ، * ، حد = هیچ ، lookup_lines = true ، capture_locals = false)

یک استثنا را برای ارائه بعدی ضبط کنید. محدود ، lookup_lines و capture_locals مانند کلاس stacksummary است.

توجه داشته باشید که وقتی افراد محلی اسیر می شوند ، در ردیاب نیز نشان داده می شوند.

چاپ ( * ، پرونده = هیچ ، زنجیره ای = درست)

چاپ به پرونده (پیش فرض sys. stderr) اطلاعات استثنائی که توسط قالب () بازگردانده می شود.

جدید در نسخه 3. 11.

استثنا را قالب بندی کنید.

اگر زنجیره ای صحیح نباشد ، __cause__ و __context__ قالب بندی نمی شوند.

مقدار بازگشت ، ژنراتور رشته ها است که هر یک به یک خط جدید پایان می یابد و برخی از آنها حاوی خطوط جدید داخلی هستند. print_exception () یک بسته بندی در اطراف این روش است که فقط خطوط را روی یک پرونده چاپ می کند.

پیام نشان می دهد که کدام استثناء رخ داده است همیشه آخرین رشته در خروجی است.

بخشی از استثناء Traceback را قالب بندی کنید.

مقدار بازده ژنراتور رشته ها است که هر یک در یک خط جدید به پایان می رسد.

به طور معمول ، ژنراتور یک رشته واحد را منتشر می کند. با این حال ، برای استثنائات SyntaxError ، چندین خط منتشر می کند که (هنگام چاپ) اطلاعات مفصلی را در مورد محل خطای نحوی نشان می دهد.

پیام نشان می دهد که کدام استثناء رخ داده است همیشه آخرین رشته در خروجی است.

تغییر در نسخه 3. 10: پارامتر جمع و جور اضافه شد.

Objects Stacksummary

جدید در نسخه 3. 5.

اشیاء Stacksummary نمایانگر یک پشته تماس آماده برای قالب بندی هستند.

ردیابی کلاس. stacksummary ¶ عصاره classmethod (frame_gen ، * ، حد = هیچ ، lookup_lines = true ، capture_locals = false) ¶

یک شیء Stacksummary را از یک ژنراتور قاب بسازید (مانند آن توسط WALK_STACK () یا WALK_TB () برگردانده شده است.

اگر محدودیت ارائه شود، فقط این تعداد فریم از frame_gen گرفته می شود. اگر lookup_lines نادرست باشد، اشیاء FrameSummary برگشتی هنوز خطوط خود را نخوانده اند و هزینه ایجاد StackSummary را ارزان تر می کند (که ممکن است اگر واقعاً قالب بندی نشود، ارزشمند است). اگر capture_locals True باشد، متغیرهای محلی در هر FrameSummary به عنوان نمایش شیء گرفته می شوند.

classmethod from_list (a_list) ¶

یک شی StackSummary از یک لیست ارائه شده از اشیاء FrameSummary یا لیست قدیمی تاپل ها بسازید. هر تاپل باید 4 تاپل با نام فایل، lineno، نام، خط به عنوان عناصر باشد.

فهرستی از رشته های آماده برای چاپ را برمی گرداند. هر رشته در لیست به دست آمده مربوط به یک فریم از پشته است. هر رشته به یک خط جدید ختم می شود. رشته ها ممکن است حاوی خطوط جدید داخلی نیز باشند، برای مواردی که دارای خطوط متن منبع هستند.

برای دنباله های طولانی از یک قاب و خط، چند تکرار اول نشان داده می شود و به دنبال آن یک خط خلاصه تعداد دقیق تکرارهای بعدی را بیان می کند.

تغییر در نسخه 3. 6: دنباله های طولانی فریم های تکراری اکنون به اختصار خلاصه می شوند.

رشته ای را برای چاپ یکی از فریم های موجود در پشته برمی گرداند. این متد برای هر شی FrameSummary که باید توسط StackSummary. format() چاپ شود فراخوانی می شود. اگر None را برگرداند، فریم از خروجی حذف می شود.

جدید در نسخه 3. 11.

FrameSummary Objects¶

جدید در نسخه 3. 5.

یک شی FrameSummary یک فریم واحد را در یک ردیابی نشان می دهد.

ردیابی کلاسFrameSummary ( نام فایل , lineno , name , lookup_line = True , locals = None , line = None ) ¶

یک فریم را در ردیابی یا پشته ای که در حال قالب بندی یا چاپ است، نشان دهید. ممکن است به صورت اختیاری یک نسخه رشته ای از فریم های محلی موجود در آن باشد. اگر lookup_line نادرست باشد، کد منبع تا زمانی که FrameSummary به صفت خط دسترسی پیدا نکند، جستجو نمی شود (که هنگام ارسال آن به یک تاپل نیز اتفاق می افتد). خط ممکن است به طور مستقیم ارائه شود، و به هیچ وجه از جستجوی خط جلوگیری می کند. locals یک فرهنگ لغت متغیر محلی اختیاری است و در صورت ارائه، نمایش های متغیر در خلاصه برای نمایش بعدی ذخیره می شوند.

نمونه های ردیابی¶

این مثال ساده یک حلقه اولیه خواندن-ارزیابی-چاپ، مشابه (اما کمتر از) حلقه مفسر تعاملی استاندارد پایتون را پیاده سازی می کند. برای اجرای کاملتر حلقه مفسر، به ماژول کد مراجعه کنید.

مثال زیر روش های مختلف چاپ و قالب بندی استثنا و ردیابی را نشان می دهد:

خروجی برای مثال مشابه این خواهد بود:

مثال زیر روش های مختلف چاپ و قالب بندی پشته را نشان می دهد:

ویدیو های آموزشی فارکس...
ما را در سایت ویدیو های آموزشی فارکس دنبال می کنید

برچسب : نویسنده : محبوب امانی بازدید : 58 تاريخ : پنجشنبه 24 فروردين 1402 ساعت: 23:14