有没有办法使用Python编码,使XML-RPC故障消息在客户端正确显示换行?

0 投票
1 回答
1267 浏览
提问于 2025-04-17 13:30

在一个用Python写的xmlrpc服务器的代码中,我有一行代码是在一个函数里覆盖了SimpleXMLRPCServer._marshaled_dispatch

response = xmlrpclib.dumps(
            xmlrpclib.Fault(1, "some error\nnext line\n"),
            encoding=self.encoding, allow_none=self.allow_none)

目的是为了创建一些自定义的错误或故障信息,显示在客户端上。但是,这段代码在客户端上显示的内容像这样:

xmlrpclib.Fault: <Fault 1: "some error\nnext line\n">

而我希望显示的内容是这样的:

xmlrpclib.Fault: <Fault 1: "some error
next line
">

也就是说,换行符实际上是“被使用”的,而不是直接打印出来。

有没有什么办法可以实现这个(在服务器端,也就是修改刚才提到的那行代码,并且不使用第三方包)?

1 个回答

1

你看到的是一个 Fault 对象的表现形式;具体的错误信息其实在 .faultString 这个属性里:

print fault.faultString

这个 Fault 类的 __repr__ 方法会用 repr() 来表示这个值;如果不想这样,你就得修改 xmlrpclib.Fault 类本身(比如替换它的 __repr__ 方法或者给它加一个 __str__ 方法)。

你可以通过一种叫“猴子补丁”的方式来修改这个类:

from xmlrpclib import Fault

def fault_repr(self):
    return "<Fault %s: %s>" % (self.faultCode, self.faultString)

Fault.__repr__ = fault_repr

撰写回答