寒假作业点评

本次作业一共收到3分(也是超过一半人数了……),质量什么的还算好的样子。程序本身并没有十分复杂的逻辑困难,总的来说就是数据获取和数据处理,比较烦的地方就是编码问题,在Linux下面也可能出现编码问题,但是会比Windows下少一些(编码问题还会在很多地方遇到的)

对于数据收集部分,发现有两种方式,区别基本就是postget两种方法。当然比较简单的方法就是get方法

对于get方法

Response = urllib.open(url)

或者

Response = urllib2.open(url)

(两种写法没有太多本质差别)

这里的需要查找的单词或者词语就在url里面,当然在查找英文单词的时候没有什么问题,但是也有人遇到了在查阅中文单词的时候报错,找不到这个中文释义,虽然报错本来是可以过滤掉的,因为在返回的json里面已经包含了错误码,但是只有一个人对这个错误进行过处理(其他人是因为没有遇到过错误么,万一翻译的东西服务器无法理解呢)

{
    "error_code":"52001",
    "error_msg":"TIMEOUT",
    "from":"auto",
    "to":"auto",
    "monLang":"zh",
    "query":null
}

当然这里之所以会出现中文翻译出错,问题就出在对这个url的处理,具体的说应该是对单词数据传送形式的处理。在url传递过程中,一般是看不到url里面的中文字符的,这里就是因为url被编码过,解码过程服务器会自己完成,所以这里需要对url中的中文数据经行编码

urllib.quote(word)

这样的话,url的问题就解决了

对于post方法的话,也需要对数据经行urlencode,数据的编码也在这个函数里面完成,至于是否需要encode或者decode就是操作系统的问题了

data=urllib.urlencode(data)
Response  = urllib2.urlopen(url,data)

这里的url里面只是包含了目标地址,一些必要的数据包含在了data里面,data是一个字典,这个字典里面当然也就包含了目标单词

这样,数据就被下载下来到了Response里面了,像一个文件那样,只需要把数据读出来就好了,当然,像文件一样,读出来的原始数据一定是字符串,对于这个json字符串的处理也就产生了不一样的使用方法

Data = json.loads(Response.read())

或者

Data = json.JSONDecoder(Response.read())

或者

Data = eval(Response.read())

当然前两种方法是针对json来的,第一种更是最常用的,最后一种当然也可以,但是对于类型已知的数据应该使用更加具有针对性的函数,eval的使用应该是the last choice,但是他在一些场合下是必要甚至必须的。

在这里,没有人注意到的是在不再使用Response 的时候却没有关闭这个连接,应该在read之后Response.close()关闭连接,不过这里当然显现不出会有什么严重后果。

最后对于数据的处理,比较欠缺的就是异常的处理(在获取数据的时候本来也需要异常处理的,不过一般都会在网络通畅的情况下使用,也就没注意会有这些异常)。获取数据的异常处理需要在程序中完成(使用try except 语句什么的完成),而对于数据处理的异常也就是对错误码的判断,能在一开始就想到这个的话还是比较不错的,只是这个同学在判断的时候显得有些冗余了的样子

if(result.has_key("error_code")==True)

         这里其实只需要

if(result.has_key("error_code"))

         应该就足够了

对于翻译结果嘛,只需要把数据全部打印出来(或者百度翻译的接口说明)就知道了

    作业情况大概就是这样,能够完成指定的基本功能,如果源代码都是出于自己之手或者能理解代码的话,python也就基本入门了



关于我们

青传技术中心是武汉大学青年传媒集团领导下的技术部门,负责青传技术平台的构建,开发与维护


下属部门

  • 设计部
  • 前端部
  • 后端部

核心开发团队

姓名:叶泽韬

领域:Python PHP

院系:国软

部门:后端部

姓名:徐游荧

领域:前端 Java

院系:国软

部门:前端部

姓名:原致远

领域:Python JS

院系:计科

部门:后端部

姓名:邓露艺

领域:Python C++

院系:电信

部门:后端部