这个事情再次佐证了一个莫名其妙的现象背后一定会有一个愚蠢到无以复加的错误的真理。

写python单元测试的时候发现一个莫名其妙的问题:

    def xmlStandander(self,s):
return xml.dom.minidom.parseString(s).toxml(); def assertEqualXMLStruct(self,get,wanted):
self.assertEqual(
self.xmlStandander(get),
self.xmlStandander(wanted)
);

这两个函数是用于测试的辅助函数。

测试函数被这样调用:

    def testNoneExpect(self):
self.assertEqualXMLStruct
(
mapToXmlElement("item", {}),
'<item></item>'
);

测试通过。我很无知的认为什么问题都没有了。

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.016s OK

直到我很无聊的打算在里头引发一个异常:

    def assertEqualXMLStruct(self,get,wanted):
raise ValueError();
self.assertEqual(
self.xmlStandander(get),
self.xmlStandander(wanted)
);

运行。。。咦,怎么会依然OK?

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.016s OK

干掉这个ValueError,换个位置。。我在这里引发:

    def testNoneExpect(self):
raise ValueError();
self.assertEqualXMLStruct
(
mapToXmlElement("item", {}),
'<item></item>'
);

这回成功的引发了异常。。

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\temp\py\xmltest.py", line 82, in testNoneExpect
raise ValueError();
ValueError ----------------------------------------------------------------------
Ran 6 tests in 0.000s FAILED (errors=1)

真是个诡异的问题。。。

然后我很无趣的决定在里头随便乱来一下。。。

    def assertEqualXMLStruct(self,get,wanted):
asdfasasasdfasgadgfads
self.assertEqual(
self.xmlStandander(get),
self.xmlStandander(wanted)
);

结果如下:

D:\temp\py>xmltest.py
......
----------------------------------------------------------------------
Ran 6 tests in 0.000s OK

这极大的颠覆了我的人生观和世界观。。。然后我试了试这个。。

    def testNoneExpect(self):
asdfasasasdfasgadgfads
self.assertEqualXMLStruct
(
mapToXmlElement("item", {}),
'<item></item>'
);

结果如下:

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\temp\py\xmltest.py", line 84, in testNoneExpect
asdfasasasdfasgadgfads
NameError: global name 'asdfasasasdfasgadgfads' is not defined ----------------------------------------------------------------------
Ran 6 tests in 0.016s FAILED (errors=1)

很明显,我敲入的这一堆乱七八糟的东西不是魔力字符,而是那个函数没有运行。

那么为什么没有运行呢?

揭晓正确答案。。。。。。

~~~~~~~悲催的分割线~~~~~~~

正确的调用方法如下:

    def testNoneExpect(self):
self.assertEqualXMLStruct(
mapToXmlElement("item", {}),
'<item></item>'
);

我的世界终于被久违的纠正了:

D:\temp\py>xmltest.py
....E.
======================================================================
ERROR: testNoneExpect (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\temp\py\xmltest.py", line 84, in testNoneExpect
asdfasasasdfasgadgfads
NameError: global name 'asdfasasasdfasgadgfads' is not defined ----------------------------------------------------------------------
Ran 6 tests in 0.000s FAILED (errors=1)

祝福你们。。。。

一个愚蠢的python逻辑语法错误的更多相关文章

  1. 又是一个愚蠢的错误,皆因.xml而起

       论java中的.xml到底有多坑?! 感觉自己都快哭了,再一次被.xml给坑了一下,这次坑的太狠了,一下子导致自己浪费了昨天一下午,一晚上,今天一上午和半个下午呀,中间的过程真的是乏善可陈呀,各 ...

  2. python的错误和异常

    python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...

  3. python基础——错误处理

    python基础——错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数 ...

  4. python的错误处理

    一.python的错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错以及出错的原因. 在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数o ...

  5. 作业1开发一个简单的python计算器

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  6. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库

    在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...

  7. python中错误、调试、单元测试、文档测试

    错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 普通的错误处理机制就是在出 ...

  8. Python 编码错误解决方案

    Python 编码错误解决方案 Python UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 7: ordin ...

  9. 10个最容易犯的Python开发错误

    10个最容易犯的Python开发错误 转载 2017年09月25日 16:54:36 标签: python / 大数据 / 大讲台   Python是一门简单易学的编程语言,语法简洁而清晰,并且拥有丰 ...

随机推荐

  1. eclipse+IDEA快捷键记录

    Eclipse中自动获取 IDEA中:ctrl+alt+v==alt+shift+l 其它   (有些地方前面的C代表Ctrl .S代表Shift.A代表Alt) Ctrl+Shift+F       ...

  2. vsftpd的配置文件说明

    vsftpd的配置文件说明: vsftpd.ftpusers:位于/etc目录下.它指定了哪些用户账户不能访问FTP服务器,例如root等. vsftpd.user_list:位于/etc目录下.该文 ...

  3. [转帖]七牛云对HTTPS 的解释

     感觉对RTT 还有 建立连接的说明挺好的 转帖一下 学习   https://www.cnblogs.com/qiniu/p/6856012.html   序•魔戒再现   几天前,OpenSSL  ...

  4. 【Java线程】SwingWorker的用法

    Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT).他们要么从非UI线程访问UI组件:要么不考虑事件执行顺序:要么不使用独立任务线程而在ED ...

  5. 嵌套的 ajax 请求

    今天看到了一个嵌套的ajax,算是长见识了. 不过看一眼就知道怎么回事了. 不是不会,就怕想不到. //发送一个ajax请求,嵌套的ajax请求 'ajaxCall': function(url1, ...

  6. Java乐观锁、悲观锁

    乐观锁 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号 ...

  7. double 和 im2double 的区别

    double 就是简单地把一个变量类型转换成double型,数值大小不变. 函数im2double将输入换成double类型.如果输入是unit8,unit16或者是二值的logical类型,则函数i ...

  8. 对HashMap的理解(二):高并发下的HashMap

    在分析hashmap高并发场景之前,我们要先搞清楚ReHash这个概念.ReHash是HashMap在扩容时的一个步骤.HashMap的容量是有限的.当经过多次元素插入,使得HashMap达到一定饱和 ...

  9. 编辑器配置 vscode / Atom / Sublime Text

    vscode配置 https://code.visualstudio.com/docs/languages/cpp https://www.zhihu.com/question/30315894/an ...

  10. bzoj1683[Usaco2005 Nov]City skyline 城市地平线

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1683 Input 第1行:2个用空格隔开的整数N和W. 第2到N+1行:每行包括2个用空格 ...