python - 获取traceback.print_stack()的帧输入参数的正确方法
问题描述
我正在尝试使用traceback.print_stack()打印导致错误的堆栈,而不包括实际打印堆栈的行。例如:
import os
import pathlib
import sys
import traceback
def main():
path = pathlib.Path('/foo')
content_bytes = b''
my_func(path, content_bytes)
def my_func(path, content_bytes):
for (dirpath, dirnames, filenames) in os.walk(path, onerror=on_error(path)):
for filename in filenames:
file: bytes = open(dirpath + "/" + filename, "rb").read()
content_bytes += file
def on_error(path):
traceback.print_stack(sys._getframe(1))
print("path is not a dir path supplied: {}".format(path))
main()
假设我没有命名/foo
此打印的目录:
path is not a dir path supplied: /foo
File "/{projectDir}/examples/test.py", line 22, in <module>
main()
File "/{projectDir}/examples/test.py", line 10, in main
my_func(path, content_bytes)
File "/{projectDir}/examples/test.py", line 13, in my_func
for (dirpath, dirnames, filenames) in os.walk(path, onerror=on_error(path)):
如我所愿,但我_getframe
为这样做而调用受保护的 sys 方法这一事实感到困扰。Pycharm 似乎也不喜欢我这样做。是否有更合适的方法来获取堆栈中用作第一个参数的当前/上一个帧traceback.print_stack
?
我看到了很多以前的 SO 答案,sys.exc_info()
但在这种情况下,这似乎是一个填充有 None 对象的元组。
解决方案
推荐阅读
- clips - 在 CLIPS 中生成真值表
- node.js - 使用 Penthouse + Cloud Run 启动浏览器进程失败
- google-analytics - 在 Google Analytics 中跟踪 HTML5 视频播放事件需要什么代码?
- mongodb - Mongodb 打不开
- python - 在 Python 中使用 URL 从 txt 中提取数据
- flutter - 在flutter中调用api后更新ModalBottomSheet
- bash - 使用 xargs 并行的多个 rsync - 最有效的目录结构通过
- python - 如何将更长的列表附加到数据框
- css - vue-simple-calendar“类”项目属性不起作用
- php - 为什么我们得到一个未定义索引的错误并且我们正在丢失我们的数据?