python - 打印多行引发的异常

标签 python exception

我正在通过 Python 从 SVN 获取更新。

我有这个:

try: 
    output = subprocess.check_output(svn.update_cmd,
                                     stderr=subprocess.STDOUT, shell=True)
    print output
    print 'finished svn update'

    revision_number = output.split()[-1].rstrip('.') #revision number
    if log_update:
        write_update(revision_number)
    return revision_number
except subprocess.CalledProcessError, e:
    raise SVNUpdateError(e.output)

当我引发自定义 SNVUpdateError 时,我将换行符打印为 \ns。

如果我try: except SVNUpdateError,我可以漂亮地打印该行,但它会作为标准输出出现,并传递到下一个代码块。我想提出异常(exception),完全退出任务,并从 SVN 客户端打印结果,以了解为什么在没有换行符和其他特殊字符的情况下事情会向南发展。

谢谢。

最佳答案

自从您使用 Python 2.x 以来:

# Usually a simpler error message without newlines
print >>sys.stderr, e.message
# If your message is overly complex, with newlines -- pick a line to print and process it
#print >>sys.stderr, e.message.split('\n')[-1].strip()
# Kill the process
sys.exit(1)

这会将消息(在注释的打印语句中包含受限制的换行符)打印到 stderr 并终止进程。

编辑

如果字符串中有实际的“\\n”字符而不是字符串中的特殊字符“\n”(这意味着某人很可能在字符串创建中的某处具有类型),您可以在打印之前进行简单的字符串替换:

print >>sys.stderr, malformatedStr.replace("\\n", "\n")

关于python - 打印多行引发的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618913/

相关文章:

android - 无法实例化 Activity ComponentInfo

c++ - 字符串超出范围异常

c# - .NET Client编程出现异常 'The AMQP operation was interrupted' (code=406)

Python按值对深度嵌套的字典列表进行排序

python - 难以理解 Python 中的嵌套函数

python - 导入错误: No module named _multiprocessing

java - ExceptionMapper 的 Jersey/Jackson 异常问题

python - 根据另一列中的相同值将值分配给列

python - 客户端服务器通信opc ua

php - 如何在 zend 框架 2 中邮件传输失败时返回 false?