如果我试图在python中运行.ls,那么我就会得到一个SyntaxError。
>>> .ls
File "<stdin>", line 1
.ls
^
SyntaxError: invalid syntax但是,如果我导入PyROOT,它会使这个语法变得合法(并且在根中这样做,列出当前文件的内容;在这里的示例中,我没有打开任何内容)。
>>> import ROOT
>>> .ls
>>>类似地,.q在导入根后退出Python解释器,就像在普通根解释器中所做的那样。
这是怎么回事?
发布于 2016-06-10 10:32:09
它可以在lib/ROOT.py中找到。
有一个条件是,如果没有ipython,则重新定义sys.excepthook:
sys.excepthook = _excepthook这反过来又包含了如下内容:
### RINT command emulation
------------------------------------------------------
def _excepthook( exctype, value, traceb ):
# catch syntax errors only (they contain the full line)
if isinstance( value, SyntaxError ) and value.text:
cmd, arg = split( value.text[:-1] )
# mimic ROOT/CINT commands
if cmd == '.q':
sys.exit( 0 )或者几行低语:
elif cmd == '.ls':
return sys.modules[ __name__ ].gDirectory.ls()如果不做这些工作,就会恢复正常的处理。
https://stackoverflow.com/questions/37738012
复制相似问题