20
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng đưa một bản ghi đơn giản vào tập lệnh của mình. Nhật ký này sẽ cho tôi biết lỗi ở đâu và càng nhiều thông tin càng tốt để sửa chữa tập lệnh.
Tôi đã đặt in vào tệp str[e]
vào mỗi ngoại trừ nhưng nó cung cấp rất ít thông tin để biết điều gì đang xảy ra.
Làm thế nào tôi có thể làm cho nó được xây dựng? Ví dụ, toàn bộ văn bản ngoại lệ không bị bắt mà tôi có thể thấy trong bảng điều khiển?
try:
#code
except Exception as e:
print_to_file[log.txt,str[e]]
hỏi ngày 26 tháng 7 năm 2015 lúc 12:20Jul 26, 2015 at 12:20
2
thử cái này,
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
Nếu bạn muốn một giải pháp tốt hơn nên sử dụng logger quản lý dấu thời gian, kích thước tệp và xoay cho SYOU [thực hiện trình xử lý logger]
Đây là một ví dụ với logger, dấu thời gian và xoay vòng
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
Đã trả lời ngày 26 tháng 7 năm 2015 lúc 12:40Jul 26, 2015 at 12:40
HoraciohoracioHoracio
2.7651 Huy hiệu vàng13 Huy hiệu bạc23 Huy hiệu đồng1 gold badge13 silver badges23 bronze badges
Mã nguồn: lib/traceback.py Lib/traceback.py
Mô -đun này cung cấp một giao diện tiêu chuẩn để trích xuất, định dạng và in dấu vết ngăn xếp của các chương trình Python. Nó chính xác bắt chước hành vi của trình thông dịch Python khi nó in một dấu vết ngăn xếp. Điều này rất hữu ích khi bạn muốn in các dấu vết ngăn xếp dưới điều khiển chương trình, chẳng hạn như trong một trình bao bọc trên mạng xung quanh trình thông dịch.
Mô -đun sử dụng các đối tượng Traceback - đây là loại đối tượng được lưu trữ trong biến sys.last_traceback
và được trả về dưới dạng mục thứ ba từ
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
0.Mô -đun xác định các chức năng sau:
________ 11 ________ 12 [tb, giới hạn = none, file = none] ¶[tb, limit=None, file=None]¶In lên để giới hạn các mục nhập dấu vết từ TB đối tượng Traceback [bắt đầu từ khung người gọi] nếu giới hạn là dương. Nếu không, in các mục
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
3 cuối cùng. Nếu giới hạn bị bỏ qua hoặc import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4, tất cả các mục được in. Nếu tệp bị bỏ qua hoặc import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4, đầu ra sẽ chuyển đến import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
6; Nếu không, nó phải là một tệp mở hoặc đối tượng giống như tệp để nhận đầu ra.Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ giới hạn âm.Added negative limit support.
________ 11 ________ 18 [exc, /, [value, tb,] giới hạn = none, file = none, chuỗi = true][exc, /, [value, tb, ]limit=None, file=None, chain=True]¶In thông tin ngoại lệ và ngăn xếp các mục nhập từ TB đối tượng Traceback sang tệp. Điều này khác với
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
9 theo những cách sau:Nếu TB không phải là
4, nó sẽ in tiêu đềimport traceback try: 1/0 except Exception as e: with open['log.txt', 'a'] as f: f.write[str[e]] f.write[traceback.format_exc[]]
1import logging from logging.handlers import RotatingFileHandler import traceback logger = logging.getLogger["Rotating Log"] logger.setLevel[logging.ERROR] handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5] formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s'] handler.setFormatter[formatter] logger.addHandler[handler] try: 1/0 except Exception as e: logger.error[str[e]] logger.error[traceback.format_exc[]]
Nó in loại ngoại lệ và giá trị sau dấu vết ngăn xếp
Nếu loại [giá trị] là
2 và giá trị có định dạng thích hợp, nó sẽ in dòng trong đó lỗi cú pháp xảy ra với một chăm sóc cho biết vị trí gần đúng của lỗi.import logging from logging.handlers import RotatingFileHandler import traceback logger = logging.getLogger["Rotating Log"] logger.setLevel[logging.ERROR] handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5] formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s'] handler.setFormatter[formatter] logger.addHandler[handler] try: 1/0 except Exception as e: logger.error[str[e]] logger.error[traceback.format_exc[]]
Vì Python 3.10, thay vì chuyển giá trị và bệnh lao, một đối tượng ngoại lệ có thể được truyền làm đối số đầu tiên. Nếu giá trị và bệnh lao được cung cấp, đối số đầu tiên bị bỏ qua để cung cấp khả năng tương thích ngược.
Đối số giới hạn tùy chọn có ý nghĩa tương tự như đối với
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
9. Nếu chuỗi là đúng [mặc định], thì các ngoại lệ được xích [thuộc tính import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
4 hoặc import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
5 của ngoại lệ] cũng sẽ được in, giống như bản thân trình thông dịch khi in một ngoại lệ chưa được xử lý.Thay đổi trong phiên bản 3.5: Đối số ETYPE bị bỏ qua và suy ra từ loại giá trị.The etype argument is ignored and inferred from the type of value.
Đã thay đổi trong phiên bản 3.10: Tham số ETYPE đã được đổi tên thành Exc và hiện chỉ có vị trí.The etype parameter has been renamed to exc and is now positional-only.
________ 11 ________ 27 [giới hạn = không, file = none, chuỗi = true] ¶[limit=None, file=None, chain=True]¶Đây là một tốc ký cho
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
8. ________ 11 ________ 30 [giới hạn = không, file = none, chuỗi = true] ¶[limit=None, file=None,
chain=True]¶Đây là một tốc ký cho
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]1. Nói chung, nó sẽ chỉ hoạt động sau khi một ngoại lệ đã đạt đến một lời nhắc tương tác [xem
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]2]. ________ 11 ________ 34 [f = none, giới hạn = none, file = none] ¶[f=None, limit=None, file=None]¶
In lên để giới hạn các mục nhập dấu vết [bắt đầu từ điểm gọi] nếu giới hạn là dương. Nếu không, in các mục
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
3 cuối cùng. Nếu giới hạn bị bỏ qua hoặc import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4, tất cả các mục được in. Đối số F tùy chọn có thể được sử dụng để chỉ định khung ngăn xếp thay thế để bắt đầu. Đối số tệp tùy chọn có ý nghĩa tương tự như đối với import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
9.Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ giới hạn âm.Added negative limit support.
Trả về một đối tượng
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]8 đại diện cho một danh sách các mục nhập theo dõi ngăn xếp được xử lý trước được trích xuất từ TB đối tượng Traceback. Nó rất hữu ích cho định dạng thay thế của dấu vết ngăn xếp. Đối số giới hạn tùy chọn có ý nghĩa tương tự như đối với
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
9. Một mục nhập dấu vết ngăn xếp trước của người Viking là một đối tượng import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]0 có chứa các thuộc tính
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]1,
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]2,
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]3 và
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]4 đại diện cho thông tin thường được in cho dấu vết ngăn xếp.
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]4 là một chuỗi với khoảng trắng dẫn đầu và bị tước bỏ; Nếu nguồn không có sẵn, nó là
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4.Trích xuất dấu vết thô từ khung ngăn xếp hiện tại. Giá trị trả về có định dạng tương tự như đối với
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]7. Các đối số F và giới hạn tùy chọn có cùng ý nghĩa với
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]8. ________ 11 ________ 50 [Trích xuất_list] ¶[extracted_list]¶
Đưa ra một danh sách các đối tượng Tuples hoặc
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]0 được trả về bởi
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]7 hoặc
*** print_tb: File "", line 10, in lumberjack[] *** print_exception: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** print_exc: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** format_exc, first and last line: Traceback [most recent call last]: IndexError: tuple index out of range *** format_exception: ['Traceback [most recent call last]:\n', ' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n', 'IndexError: tuple index out of range\n'] *** extract_tb: [, , ] *** format_tb: [' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n'] *** tb_lineno: 103, hãy trả lại một danh sách các chuỗi sẵn sàng để in. Mỗi chuỗi trong danh sách kết quả tương ứng với mục có cùng chỉ mục trong danh sách đối số. Mỗi chuỗi kết thúc trong một dòng mới; Các chuỗi cũng có thể chứa các dòng nội bộ, đối với những mục có dòng văn bản nguồn không phải là
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4. ________ 11 ________ 56 [exc, /[, value]] ¶[exc, /[,
value]]¶Định dạng phần ngoại lệ của một dấu vết bằng cách sử dụng một giá trị ngoại lệ như được đưa ra bởi
*** print_tb: File "", line 10, in lumberjack[] *** print_exception: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** print_exc: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** format_exc, first and last line: Traceback [most recent call last]: IndexError: tuple index out of range *** format_exception: ['Traceback [most recent call last]:\n', ' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n', 'IndexError: tuple index out of range\n'] *** extract_tb: [, , ] *** format_tb: [' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n'] *** tb_lineno: 107. Giá trị trả về là một danh sách các chuỗi, mỗi chuỗi kết thúc trong một dòng mới. Thông thường, danh sách chứa một chuỗi duy nhất; Tuy nhiên, đối với các ngoại lệ
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
2, nó chứa một số dòng [khi được in] hiển thị thông tin chi tiết về nơi xảy ra lỗi cú pháp. Thông báo cho biết ngoại lệ nào xảy ra là chuỗi cuối cùng trong danh sách.Vì Python 3.10, thay vì giá trị vượt qua, một đối tượng ngoại lệ có thể được truyền như là đối số đầu tiên. Nếu giá trị được cung cấp, đối số đầu tiên bị bỏ qua để cung cấp khả năng tương thích ngược.
Đã thay đổi trong phiên bản 3.10: Tham số ETYPE đã được đổi tên thành Exc và hiện chỉ có vị trí.The etype parameter has been renamed to exc and is now positional-only.
________ 11 ________ 60 [exc, /, [value, tb,] giới hạn = none, chuỗi = true] ¶[exc, /, [value, tb, ]limit=None, chain=True]¶Định dạng một dấu vết ngăn xếp và thông tin ngoại lệ. Các đối số có cùng ý nghĩa với các đối số tương ứng với
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']1. Giá trị trả về là một danh sách các chuỗi, mỗi chuỗi kết thúc trong một dòng mới và một số có chứa các dòng bên trong. Khi các dòng này được nối và in, chính xác cùng một văn bản được in như
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']1.
Thay đổi trong phiên bản 3.5: Đối số ETYPE bị bỏ qua và suy ra từ loại giá trị.The etype argument is ignored and inferred from the type of value.
Đã thay đổi trong phiên bản 3.10: Chức năng này hành vi và chữ ký này đã được sửa đổi để khớp với >>> import traceback
>>> def another_function[]:
... lumberstack[]
...
>>> def lumberstack[]:
... traceback.print_stack[]
... print[repr[traceback.extract_stack[]]]
... print[repr[traceback.format_stack[]]]
...
>>> another_function[]
File "", line 10, in
another_function[]
File "", line 3, in another_function
lumberstack[]
File "", line 6, in lumberstack
traceback.print_stack[]
[['', 10, '', 'another_function[]'],
['', 3, 'another_function', 'lumberstack[]'],
['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']]
[' File "", line 10, in \n another_function[]\n',
' File "", line 3, in another_function\n lumberstack[]\n',
' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']
1.This function’s behavior
and signature were modified to match
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']1.
Điều này giống như
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']6 nhưng trả về một chuỗi thay vì in vào tệp. ________ 11 ________ 68 [tb, giới hạn = không] ¶[tb, limit=None]¶
Một tốc ký cho
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']9. ________ 11 ________ 71 [f = none, giới hạn = không] ¶[f=None, limit=None]¶
Một tốc ký cho
>>> import traceback >>> traceback.format_list[[['spam.py', 3, '', 'spam.eggs[]'], ... ['eggs.py', 42, 'eggs', 'return "bacon"']]] [' File "spam.py", line 3, in \n spam.eggs[]\n', ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] >>> an_error = IndexError['tuple index out of range'] >>> traceback.format_exception_only[type[an_error], an_error] ['IndexError: tuple index out of range\n']2. ________ 11 ________ 74 [TB][tb]¶
Xóa các biến cục bộ của tất cả các khung ngăn xếp trong TB theo dõi bằng cách gọi phương thức
>>> import traceback >>> traceback.format_list[[['spam.py', 3, '', 'spam.eggs[]'], ... ['eggs.py', 42, 'eggs', 'return "bacon"']]] [' File "spam.py", line 3, in \n spam.eggs[]\n', ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] >>> an_error = IndexError['tuple index out of range'] >>> traceback.format_exception_only[type[an_error], an_error] ['IndexError: tuple index out of range\n']5 của mỗi đối tượng khung.
Mới trong phiên bản 3.4.
________ 11 ________ 77 [f][f]¶Đi bộ ngăn xếp theo
>>> import traceback >>> traceback.format_list[[['spam.py', 3, '', 'spam.eggs[]'], ... ['eggs.py', 42, 'eggs', 'return "bacon"']]] [' File "spam.py", line 3, in \n spam.eggs[]\n', ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] >>> an_error = IndexError['tuple index out of range'] >>> traceback.format_exception_only[type[an_error], an_error] ['IndexError: tuple index out of range\n']8 từ khung đã cho, mang lại cho khung và số đường cho mỗi khung hình. Nếu F là
import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4, ngăn xếp hiện tại được sử dụng. Người trợ giúp này được sử dụng với str[e]
0.Mới trong phiên bản 3.5.
________ 11 ________ 82 [TB][tb]¶Đi bộ theo dõi sau str[e]
3 mang lại khung và số đường cho mỗi khung hình. Người trợ giúp này được sử dụng với str[e]
0.
Mới trong phiên bản 3.5.
________ 11 ________ 82 [TB]
Đi bộ theo dõi sau str[e]
3 mang lại khung và số đường cho mỗi khung hình. Người trợ giúp này được sử dụng với str[e]
0.
Mới trong phiên bản 3.5.
________ 11 ________ 82 [TB]
Đi bộ theo dõi saustr[e]
3 mang lại khung và số đường cho mỗi khung hình. Người trợ giúp này được sử dụng với str[e]
0.[exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True,
capture_locals=False, compact=False]¶Nắm bắt một ngoại lệ cho kết xuất sau này. giới hạn, tra cứu_lines và capture_locals cũng như đối với lớp
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]8.
Nếu Compact là đúng, chỉ có dữ liệu được yêu cầu bằng phương thức ________ 85 sys.last_traceback
1 được lưu trong các thuộc tính của lớp. Cụ thể, trường
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
5 chỉ được tính toán nếu import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
4 là import traceback
try:
1/0
except Exception as e:
with open['log.txt', 'a'] as f:
f.write[str[e]]
f.write[traceback.format_exc[]]
4 và sys.last_traceback
5 là sai.Lưu ý rằng khi người dân địa phương bị bắt, chúng cũng được hiển thị trong dấu vết.
________ 96¶A str[e]
5 của
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
4 gốc. ________ 99¶A str[e]
5 của
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
5 gốc. ________ 102¶Giá trị sys.last_traceback
5 từ ngoại lệ ban đầu.
A
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]8 đại diện cho Traceback. ________ 106¶
Lớp của Traceback ban đầu.
________ 107¶Đối với lỗi cú pháp - Tên tệp nơi xảy ra lỗi.
________ 108¶Đối với lỗi cú pháp - Số dòng nơi xảy ra lỗi.
________ 109¶Đối với lỗi cú pháp - văn bản xảy ra lỗi.
________ 110¶Đối với lỗi cú pháp - phần bù vào văn bản nơi xảy ra lỗi.
________ 111¶Đối với lỗi cú pháp - Thông báo lỗi trình biên dịch.
classMethod ________ 112 [exc, *, giới hạn = không[exc, *, limit=None, lookup_lines=True, capture_locals=False]¶Nắm bắt một ngoại lệ cho kết xuất sau này. giới hạn, tra cứu_lines và capture_locals cũng như đối với lớp
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]8.
Lưu ý rằng khi người dân địa phương bị bắt, chúng cũng được hiển thị trong dấu vết.
________ 96¶[*, chain=True]¶A str[e]
5 của
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
4 gốc.________ 99¶
A str[e]
5 của
import logging
from logging.handlers import RotatingFileHandler
import traceback
logger = logging.getLogger["Rotating Log"]
logger.setLevel[logging.ERROR]
handler = RotatingFileHandler["log.txt", maxBytes=10000, backupCount=5]
formatter = logging.Formatter['%[asctime]s - %[name]s - %[levelname]s - %[message]s']
handler.setFormatter[formatter]
logger.addHandler[handler]
try:
1/0
except Exception as e:
logger.error[str[e]]
logger.error[traceback.format_exc[]]
5 gốc.________ 102¶
Giá trịsys.last_traceback
5 từ ngoại lệ ban đầu.[]¶________ 104¶
A
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]8 đại diện cho Traceback.
________ 106¶
________ 102¶
Giá trị sys.last_traceback
5 từ ngoại lệ ban đầu.Added the compact parameter.
________ 104¶
A import sys, traceback
def run_user_code[envdir]:
source = input[">>> "]
try:
exec[source, envdir]
except Exception:
print["Exception in user code:"]
print["-"*60]
traceback.print_exc[file=sys.stdout]
print["-"*60]
envdir = {}
while True:
run_user_code[envdir]
8 đại diện cho Traceback.
________ 106¶
Lớp của Traceback ban đầu.________ 107¶
Đối với lỗi cú pháp - Tên tệp nơi xảy ra lỗi.
________ 108¶[a_list]¶Đối với lỗi cú pháp - Số dòng nơi xảy ra lỗi.
________ 109¶[]¶Đối với lỗi cú pháp - văn bản xảy ra lỗi.
________ 110¶
Đối với lỗi cú pháp - phần bù vào văn bản nơi xảy ra lỗi.Long sequences of repeated frames are now abbreviated.
________ 111¶
A import sys, traceback
def run_user_code[envdir]:
source = input[">>> "]
try:
exec[source, envdir]
except Exception:
print["Exception in user code:"]
print["-"*60]
traceback.print_exc[file=sys.stdout]
print["-"*60]
envdir = {}
while True:
run_user_code[envdir]
8 đại diện cho Traceback.
________ 106¶
Lớp của Traceback ban đầu.[filename, lineno, name, lookup_line=True, locals=None, line=None]¶________ 107¶
Đối với lỗi cú pháp - Tên tệp nơi xảy ra lỗi.
________ 108¶
import sys, traceback def run_user_code[envdir]: source = input[">>> "] try: exec[source, envdir] except Exception: print["Exception in user code:"] print["-"*60] traceback.print_exc[file=sys.stdout] print["-"*60] envdir = {} while True: run_user_code[envdir]
Ví dụ sau đây cho thấy các cách khác nhau để in và định dạng ngoại lệ và dấu vết:
import sys, traceback def lumberjack[]: bright_side_of_life[] def bright_side_of_life[]: return tuple[][0] try: lumberjack[] except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info[] print["*** print_tb:"] traceback.print_tb[exc_traceback, limit=1, file=sys.stdout] print["*** print_exception:"] traceback.print_exception[exc_value, limit=2, file=sys.stdout] print["*** print_exc:"] traceback.print_exc[limit=2, file=sys.stdout] print["*** format_exc, first and last line:"] formatted_lines = traceback.format_exc[].splitlines[] print[formatted_lines[0]] print[formatted_lines[-1]] print["*** format_exception:"] print[repr[traceback.format_exception[exc_value]]] print["*** extract_tb:"] print[repr[traceback.extract_tb[exc_traceback]]] print["*** format_tb:"] print[repr[traceback.format_tb[exc_traceback]]] print["*** tb_lineno:", exc_traceback.tb_lineno]
Đầu ra cho ví dụ sẽ trông tương tự như thế này:
*** print_tb: File "", line 10, in lumberjack[] *** print_exception: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** print_exc: Traceback [most recent call last]: File "", line 10, in lumberjack[] File "", line 4, in lumberjack bright_side_of_life[] IndexError: tuple index out of range *** format_exc, first and last line: Traceback [most recent call last]: IndexError: tuple index out of range *** format_exception: ['Traceback [most recent call last]:\n', ' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n', 'IndexError: tuple index out of range\n'] *** extract_tb: [, , ] *** format_tb: [' File "", line 10, in \n lumberjack[]\n', ' File "", line 4, in lumberjack\n bright_side_of_life[]\n', ' File "", line 7, in bright_side_of_life\n return tuple[][0]\n'] *** tb_lineno: 10
Ví dụ sau đây cho thấy các cách khác nhau để in và định dạng ngăn xếp:
>>> import traceback >>> def another_function[]: ... lumberstack[] ... >>> def lumberstack[]: ... traceback.print_stack[] ... print[repr[traceback.extract_stack[]]] ... print[repr[traceback.format_stack[]]] ... >>> another_function[] File "", line 10, in another_function[] File "", line 3, in another_function lumberstack[] File "", line 6, in lumberstack traceback.print_stack[] [['', 10, '', 'another_function[]'], ['', 3, 'another_function', 'lumberstack[]'], ['', 7, 'lumberstack', 'print[repr[traceback.extract_stack[]]]']] [' File "", line 10, in \n another_function[]\n', ' File "", line 3, in another_function\n lumberstack[]\n', ' File "", line 8, in lumberstack\n print[repr[traceback.format_stack[]]]\n']
Ví dụ cuối cùng này cho thấy một vài chức năng định dạng cuối cùng:
>>> import traceback >>> traceback.format_list[[['spam.py', 3, '', 'spam.eggs[]'], ... ['eggs.py', 42, 'eggs', 'return "bacon"']]] [' File "spam.py", line 3, in \n spam.eggs[]\n', ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] >>> an_error = IndexError['tuple index out of range'] >>> traceback.format_exception_only[type[an_error], an_error] ['IndexError: tuple index out of range\n']