如何正确捕获 pySVN 异常?
How do I correctly catch pySVN exceptions?
我有一个连接到 SVN 数据库并检查 folder/file 的函数。当提供正确的登录信息时,它会按原样进行。但是,当提供错误的登录信息时,pysvn 会引发异常并崩溃。
我正在尝试捕获并处理错误,但我似乎无法正确捕获它:
代码(假设'svnlogin'包含垃圾信息):
def connect_and_checkout():
client = pysvn.Client()
client.callback_get_login = svnlogin
try:
client.checkout(svnurl(),
'./examples/pysvn')
except (pysvn.ClientError) as e:
print("error during svn command", e)
预期输出:
error during svn command, 'error'
实际输出(程序崩溃):
svn: E235000: In file 'c:\buildroot\win64-vc-14.1-1.14.0\subversion-1.14.0\subversion\libsvn_client\checkout.c' line 88: assertion failed (svn_uri_is_canonical(url, scratch_pool))
除了“pysvn.ClientError”作为异常参数外,我还尝试过“svn”、“pysvn.svn”、“AssertionError”、“SvnException”和一个空白的“except:” . None 他们似乎正确地捕获了异常并让我处理它。
事实证明这是 pySVN 中的错误,根据开发人员 Barry Scott 的说法,将在修订版 2047 中修复。见下文bug report for more information
当基础 SVN-connector 发现无效的 URL 时,就会出现错误,例如来自错误 user-input 的示例。如果 URL 本身有效,但连接失败,则不会出现此错误。
与此同时,要么进行一些输入验证以检查是否为“www”。等存在,或使用以下代码片段手动引发可以处理的异常:
c = pysvn.Client()
if not c.is_url( url_candicate ):
raise AttributeError( 'bad url' )
我有一个连接到 SVN 数据库并检查 folder/file 的函数。当提供正确的登录信息时,它会按原样进行。但是,当提供错误的登录信息时,pysvn 会引发异常并崩溃。 我正在尝试捕获并处理错误,但我似乎无法正确捕获它:
代码(假设'svnlogin'包含垃圾信息):
def connect_and_checkout():
client = pysvn.Client()
client.callback_get_login = svnlogin
try:
client.checkout(svnurl(),
'./examples/pysvn')
except (pysvn.ClientError) as e:
print("error during svn command", e)
预期输出:
error during svn command, 'error'
实际输出(程序崩溃):
svn: E235000: In file 'c:\buildroot\win64-vc-14.1-1.14.0\subversion-1.14.0\subversion\libsvn_client\checkout.c' line 88: assertion failed (svn_uri_is_canonical(url, scratch_pool))
除了“pysvn.ClientError”作为异常参数外,我还尝试过“svn”、“pysvn.svn”、“AssertionError”、“SvnException”和一个空白的“except:” . None 他们似乎正确地捕获了异常并让我处理它。
事实证明这是 pySVN 中的错误,根据开发人员 Barry Scott 的说法,将在修订版 2047 中修复。见下文bug report for more information
当基础 SVN-connector 发现无效的 URL 时,就会出现错误,例如来自错误 user-input 的示例。如果 URL 本身有效,但连接失败,则不会出现此错误。
与此同时,要么进行一些输入验证以检查是否为“www”。等存在,或使用以下代码片段手动引发可以处理的异常:
c = pysvn.Client()
if not c.is_url( url_candicate ):
raise AttributeError( 'bad url' )