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>
rekod log dan debugger PDB
Kaedah penyahpepijatan mudah adalah untuk menambah pembalakan:
import logging # ... logging.debug("function is of type %s", type(function))
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()
def is_internal_function(self, function): try: return _internal_function_re.search(function) is not None except Exception: import pdb; pdb.set_trace() raise
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
exc_type, exc_value, tb = sys.exc_info() inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame pprint(inner_frame.f_locals)
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!