当python应用程序崩溃时,控制台会显示发生异常的源代码的超链接。您只需单击该链接,即可在Eclipse编辑器中打开源文件。
我有自己的异常处理程序,并希望在我的应用程序崩溃时将链接放到控制台中。
我已经查了几次这方面的信息,看不出怎么做或者根本不可能。
似乎可以通过以“'”形式写入控制台来在java中完成:' - 听众将其选中并将其转换为可点击链接。这在Python中不起作用。
有什么想法吗?
答案 0 :(得分:0)
如果你想在PyDev中添加可点击的链接,你必须以与Python中提供的方式相同的方式进行。
I.e。:您可以从https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java看到它匹配的模式是:
.*(File) \\\"([^\\\"]*)\\\", line (\\d*).
(请注意\
是java上字符串中的转义符。)
答案 1 :(得分:0)
2017年11月19日添加了两个其他正则表达式,因此日志记录配置中的日志记录格式化程序只需要包含'%(filename)s:%(lineno)s'
即可创建更简洁的链接。
示例:
[formatter_customFormatter]
format=%(asctime)s | %(name)s | %(levelname)s | %(message)s '%(filename)s:%(lineno)s'
但是,从子目录调用导入的代码时,此操作失败了,因为filename不包含任何路径信息。使用%(filepath)s
是可行的,但是以打印附加到日志输出中的整个绝对路径为代价,这与以前的File regex遇到相同的问题。但是%(name)s
通常几乎具有您想要的名称,parent_dir.filename,因为通常的做法是将__name__
传递给getLogger调用。该怎么办?
logging.getLogger(__name__.replace(".","/") + ".py")
您还可以使用与
中相同的代码为getLogger编写包装器。
def getLogger(name):
return logging.getLogger(name.replace(".","/") + ".py")
,那么您拨打Logger的电话会很正常
logger = myLogger.getLogger(__name__).
一个警告是__name__是运行main的'__main__',因此您需要区别对待以从文件中获取链接。一种简单的方法是将my_filename_with_main而不是__name__传递给getLogger。
或对所有内容使用不同的包装器
def getLogger(name):
from os import path
name = path.basename(name)
return logging.getLogger(name)
,那么您致电Logger的电话将是
logger = myLogger.getLogger(__file__).
然后,如果文件以'__main__'运行,则无需特殊处理
这是一个格式示例,名称是传递给getLogger的名称:
format=%(asctime)s | %(levelname)s | %(name)-20s | %(funcName)-10s | %(message)-35s | '%(name)s:%(lineno)s'
法比奥(Fabio)在17年3月提供的链接非常有用,我将在这里重复https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java第102-104行,其中可以找到正则表达式。
注意:PyCharm只喜欢单引号版本(如上所述),Eclipse并不是那么特别,还是可以使用。