我在日志中看到这样的警告:
py.warnings.__init__: WARNING .../bs4/__init__.py:219: UserWarning: "foo"
looks like a filename, not markup. You should probably open this file
and pass the filehandle into Beautiful Soup
Run Code Online (Sandbox Code Playgroud)
这条消息没有多大帮助.
我希望看到堆栈跟踪发生这种情况.
请不要查看此警告的内容.这个问题不是关于美丽的汤:-)
一个简单的解决方案是修改第三方代码(bs4/__init__.py在第219行)并添加如下内容:
import traceback
logger.warn('Exc at ...\n%s' % ''.join(traceback.format_stack()))
Run Code Online (Sandbox Code Playgroud)
但我想避免这种情况.原因:
我可以更改python的标志或设置,不仅可以查看一行,还可以查看while stacktrace吗?我需要上面的帧来调试这个.
在这种环境下,Python 2.7被使用了.
小智 3
您需要执行以下操作:
python -c "import site; site._script()",请参阅 USER_SITE 变量内容usercustomize.py使用以下代码将文件放入该目录中:
import traceback
import warnings
_old_warn = warnings.warn
def warn(*args, **kwargs):
tb = traceback.extract_stack()
_old_warn(*args, **kwargs)
print("".join(traceback.format_list(tb)[:-1]))
warnings.warn = warn
Run Code Online (Sandbox Code Playgroud)
归功于此代码的答案。
像往常一样运行代码。我的测试代码:
import warnings
def f():
warnings.warn("foz")
f()
Run Code Online (Sandbox Code Playgroud)
手术前:
$ python test_warn.py
test_warn.py:4: UserWarning: foz
warnings.warn("foz")
Run Code Online (Sandbox Code Playgroud)
后:
$ python test_warn.py
<USER_SITE_REDACTED>/usercustomize.py:6: UserWarning: foz
_old_warn(*args, **kwargs)
File "test_warn.py", line 6, in <module>
f()
File "test_warn.py", line 4, in f
warnings.warn("foz")
Run Code Online (Sandbox Code Playgroud)