使用rpclib进行Python网络编程时的注释问题

rpclib 是一个非常好用的 python webservice 库,可以动态的生成 wsdl, 不过这个项目已经基本停止,并被一个新的项目取代 spyne,由于旧的项目 工作已经比较稳定,所以我没有贸然升级到 spyne。

我在 rpclib 编写 service 方法时,遇到一个奇怪的错误: 访问 wsdl (http://localhost:9898/?wsdl) 页面,返回 502 Bad Gateway。

在日志中看到如下错误信息:

代码如下:

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

我检查了代码,对比了之前可以工作的版本,发现并没有什么不对的地方。

@srpc(RequestModel, _returns=Unicode)
def shenzhen(request):
  """
  根据传入的token、车牌号及车驾号,以及验证码
  查询该车辆的违章记录
  """
  logging.info(request)
  query = ShenZhenQuery(request)
  return query.query_car_records()

但就是没有正确生成 wsdl,后来我删除了方法内所有的内容(包括注释),只留下一条返回 unicode 字符串的语句,然后就工作正常了,但是当我加入了方法的文档注释后,又出来了之前的错误,于是我 怀疑到了注释上:中文的注释,却没有使用 unicode 字符串,于是使用 u"" 中文注释 """ 后,一切正常!

查看生成的 wsdl,发现原来原来 rpclib 使用注释生成了

代码如下:

<wsdl:documentation>

根据传入的token、车牌号及车驾号,以及验证码 查询该车辆的违章记录

代码如下:

</wsdl:documentation>

难怪一遇到中文注释就会出错!

(0)

相关推荐

  • python 中文乱码问题深入分析

    在本文中,以'哈'来解释作示例解释所有的问题,"哈"的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python中的str和unicode 一直以来,python中的中文编码就是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢? 在python中提到unicode,一般指的是unicode对象,例如'哈哈'的unicode对象为 u'\u54c8

  • Python实现多行注释的另类方法

    Python程序的注释感觉很不合群,对于习惯了使用/**/多行注释的人来说,到Python中只能使用#号进行单行注释很痛苦. 复制代码 代码如下: # 这里是单行注释 # a = 50 # b = 10 # c = 10 其实我们可以通过多行文本定义的格式实现多行注释: 复制代码 代码如下: """     # 这里是多行注释     a = 50     b = 10     c = 10 """ 这个方法感觉还不错,跟/**/多行注释用起来没

  • Python入门教程 超详细1小时学会Python

    为什么使用Python    假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows是批处理脚本).例如,在Windows上用ping ip 的命令依次测试各个机器并得到控制台输出.由于ping通的时候控制台文本通常是"Reply from ... " 而不通的时候文本是"time out ... " ,所以,在结果中进行

  • Python中的多行注释文档编写风格汇总

    什么是docstring 在软件工程中,其实编码所占的部分是非常小的,大多是其它的事情,比如写文档.文档是沟通的工具. 在Python中,比较推崇在代码中写文档,代码即文档,比较方便,容易维护,直观,一致. 代码写完,文档也出来了.其实Markdown也差不多这种思想,文本写完,排版也完成了. 看看PEP 0257中对docstring的定义: A docstring is a string literal that occurs as the first statement in a modu

  • Pyhton中单行和多行注释的使用方法及规范

    前言 注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的. Python  注释符 一.python单行注释符号(#) 井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释. print 1 #输出1 #号右边的内容在执行的时候是不会被输出的. 二.批量.多行注释符号 在python中也会有注释有很多行的时候,这种情况下就需要批量多行注释符了.多行注释是用三引号'''   '''包

  • Python注释详解

    注释用于说明代码实现的功能.采用的算法.代码的编写者以及创建和修改的时间等信息. 注释是代码的一部分,注释起到了对代码补充说明的作用. Python注释 Python单行注释以#开头,单行注释可以作为单独的一行放在被注释的代码行之上,也可以放在语句或者表达式之后. #Give you a chance to let you know me print("Give you a chance to let you know me") say_what = "this is a d

  • python访问类中docstring注释的实现方法

    本文实例讲述了python访问类中docstring注释的实现方法.分享给大家供大家参考.具体分析如下: python的类注释是可以通过代码访问的,这样非常利于书写说明文档 class Foo: pass class Bar: """Representation of a Bar""" pass assert Foo.__doc__ == None assert Bar.__doc__ == "Representation of a B

  • python3新特性函数注释Function Annotations用法分析

    本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Function Annotations 它的用途虽然不是语法级别的硬性要求,但是顾名思义,它可做为函数额外的注释来用. Python中普通的函数定义如下: def func(a, b, c): return a + b + c >>> func(1, 2, 3) 6 添加了函数注释的函数会变成如下形式

  • Python文件去除注释的方法

    本文实例讲述了Python文件去除注释的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python # -*- coding: GBK -*- #writer:xmnathan #py文件去注释 import re import os import ConfigParser Python='CleanNote' def ReadIni(path,section,option):#文件路径,章节,关键词 #读取ini cf=ConfigParser.ConfigParser

  • 在Python的Django框架中为代码添加注释的方法

    就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注释不能跨越多行. 这个限制是为了提高模板解析的性能. 在下面这个模板中,输出结果和模板本身是 完全一样的(也就是说,注释标签并没有被解析为注释): This is a {# this is not a comment #} test. 如果要实现多行注释,可以使用`` {% comment %}`` 模板标

随机推荐