를 사용
, 오류 메시지가 표시 ui.warn()
를 사용한 후 종료 코드를 설정하는 정수를 값을 반환 , raise mercurial.error.Abort()
을 사용하면 ui.traceback
이 True
(기본값은 False
)으로 설정되어 있지 않으면 추적 표시가되지 않습니다. Abort()
를 올리면 일반적으로 (255 종료 코드 결과)를 ui.warn('abort: ' + msg_from_exception)
및 return -1
콤보 결과 : I 명시 적으로 역 추적을 가능하게했다
$ cat demo.py
from mercurial import cmdutil, error
cmdtable = {}
command = cmdutil.command(cmdtable)
@command('demo1', [], '')
def demo1(ui, repo, *args, **opts):
ui.warn('Error message written directly to ui.warn')
return 1
@command('demo2', [], '')
def demo2(ui, repo, *args, **opts):
raise error.Abort('Error message raised with Abort')
$ hg --config extensions.demo=`pwd`/demo.py demo1
Error message written directly to ui.warn
$ echo $?
1
$ hg --config extensions.demo=`pwd`/demo.py demo2
abort: Error message raised with Abort
$?
255
$ hg --config extensions.demo=`pwd`/demo.py --config ui.traceback=true demo2
Traceback (most recent call last):
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 204, in _runcatch
return _dispatch(req)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 880, in _dispatch
cmdpats, cmdoptions)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/extensions.py", line 210, in closure
return func(*(args + a), **kw)
File "/opt/facebook/hg/lib/python2.7/site-packages/fastmanifest/cachemanager.py", line 318, in runcommandtrigger
result = orig(*args, **kwargs)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/extensions.py", line 210, in closure
return func(*(args + a), **kw)
File "/opt/facebook/hg/lib/python2.7/site-packages/fastmanifest/__init__.py", line 174, in _logonexit
r = orig(ui, repo, cmd, fullargs, *args)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/extensions.py", line 210, in closure
return func(*(args + a), **kw)
File "/opt/facebook/hg/lib/python2.7/site-packages/hgext/journal.py", line 79, in runcommand
return orig(lui, repo, cmd, fullargs, *args)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 637, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/extensions.py", line 210, in closure
return func(*(args + a), **kw)
File "/opt/facebook/hg/lib/python2.7/site-packages/hgext/pager.py", line 160, in pagecmd
return orig(ui, options, cmd, cmdfunc)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/extensions.py", line 210, in closure
return func(*(args + a), **kw)
File "/opt/facebook/hg/lib/python2.7/site-packages/hgext/color.py", line 503, in colorcmd
return orig(ui_, opts, cmd, cmdfunc)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 1010, in _runcommand
return checkargs()
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 971, in checkargs
return cmdfunc()
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/dispatch.py", line 877, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
File "/opt/facebook/hg/lib/python2.7/site-packages/mercurial/util.py", line 1036, in check
return func(*args, **kwargs)
File "/tmp/demo/demo.py", line 13, in demo2
raise error.Abort('Error message raised with Abort')
Abort: Error message raised with Abort
abort: Error message raised with Abort
주의! 파이썬
는 bool
int
타입의 서브 클래스와는 True
1
의 값을 가지며이 False
0
의 정수 값을 갖는다. Mercurial은 @command
함수가 종료 코드 (또는 종료 코드 0에 대해 None
)를 설정하는 정수를 반환 할 것으로 예상하므로 True
을 반환하여 종료 코드를 1
으로 설정합니다.
일반적으로 mercurial.commands
모듈과 다양한 hgext
확장 프로그램을 검토하여 다른 사람들이 특정 문제를 어떻게 해결했는지 알아 봅니다. hg grep
명령은, 예를 들어, 오류 처리의 예를 포함
try:
sim = float(opts.get('similarity') or 100)
except ValueError:
raise error.Abort(_('similarity must be a number'))
내가 명령 오류 error.Abort()
를 사용하는 것, 그리고 ui.warn()
플러스를 반환 :
try:
regexp = util.re.compile(pattern, reflags)
except re.error as inst:
ui.warn(_("grep: invalid match pattern: %s\n") % inst)
return 1
는 hg addremove
코드 error.Abort()
을 제기하면서 255가 아닌 종료 코드가 특별히 필요한 경우에만 정수입니다.
왜 명령이 'True'를 반환합니까? '@ command'의 반환 값은 종료 코드와 파이썬에서 'True == 1'로 해석됩니다. –