Rumah >Peranti teknologi >industri IT >Cara Debug Kesalahan Python
pemahaman yang mendalam tentang kesilapan python: penyelesaian masalah yang cekap dengan introspeksi dan debugger
Artikel ini meneroka bagaimana untuk debug ralat program dengan cekap menggunakan alat introspeksi dan debug Python seperti PDB. Artikel ini akan dibangunkan dari aspek analisis maklumat kesilapan biasa, penggunaan debugger PDB, debugging persekitaran pengeluaran, dan soalan -soalan yang sering ditanya untuk membantu pembaca meningkatkan kemahiran debugging Python mereka.
mari kita lihat contoh ralat python biasa:
<code>TypeError: expected string or buffer File "sentry/stacktraces.py", line 309, in process_single_stacktrace processable_frame, processing_task) File "sentry/lang/native/plugin.py", line 196, in process_frame in_app = (in_app and not self.sym.is_internal_function(raw_frame.get('function'))) File "sentry/lang/native/symbolizer.py", line 278, in is_internal_function return _internal_function_re.search(function) is not None</code>Mesej ralat ini hanya memberitahu kami jenis dan lokasi ralat, tetapi tidak dapat secara langsung menunjukkan punca ralat. Kita mungkin perlu meneka bahawa bilangan bulat atau nonetype diluluskan, tetapi keadaan sebenar mungkin berbeza.
rekod log dan debugger PDB
Kaedah penyahpepijatan mudah adalah untuk menambah pembalakan:
<code class="language-python">import logging # ... logging.debug("function is of type %s", type(function))</code>Ini membantu memahami jenis pembolehubah semasa pembangunan. Walau bagaimanapun, dalam persekitaran pengeluaran, pendekatan ini tidak sesuai kerana redundansi log peringkat debug.
Pada ketika ini, Debugger Python (PDB) berguna. PDB membolehkan kami melangkah melalui kod melalui titik putus dan periksa pembolehubah dan jenis mereka. Kami boleh menetapkan titik putus dengan memasukkan
ke dalam kod: import pdb; pdb.set_trace()
<code class="language-python">def is_internal_function(self, function): try: return _internal_function_re.search(function) is not None except Exception: import pdb; pdb.set_trace() raise</code>untuk melihat jenis pembolehubah, gunakan
untuk melihat pembolehubah tempatan, dan menavigasi timbunan panggilan dengan type(function)
dan locals()
Perintah. down
up
Dalam persekitaran pengeluaran, runtime cpython membolehkan kami mengakses timbunan panggilan semasa, termasuk pembolehubah tempatan untuk setiap bingkai pelaksanaan.
Maklumat pengecualian boleh diperolehi, termasuk objek Traceback. Dengan melintasi objek Traceback, kita boleh mengakses atribut setiap bingkai untuk melihat pembolehubah tempatan: sys.exc_info()
f_locals
Alat seperti
<code class="language-python">exc_type, exc_value, tb = sys.exc_info() inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame pprint(inner_frame.f_locals)</code>
FAQ
Artikel ini akhirnya menyediakan Soalan Lazim mengenai debugging ralat Python, meliputi jenis ralat biasa, penggunaan PDB, debugging IDE, pengendalian pengecualian, debugging jauh, debugging multi-threaded, debugging perpustakaan pihak ketiga, debug masalah prestasi, dan debugging kemahiran dan dll. .
Beberapa kandungan artikel ini disesuaikan daripada artikel sentry. Terima kasih kepada rakan kongsi kami yang menyokong SitePoint.
Atas ialah kandungan terperinci Cara Debug Kesalahan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!