- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好的,问题来了:在exercise 49在 Zed Shaw 的“Learn Python the Hard Way”一文中,我们需要使用 assert_raises()
测试几个异常。这是我正在测试的函数,如果省略 assert_raises()
部分,它会通过测试:
def parse_verb(word_list):
skip(word_list, 'stop')
if peek(word_list) == 'verb':
return match(word_list, 'verb')
else:
raise ParserError("Expected a verb next.")
这是测试函数和臭名昭著的 assert_raises()
行:
def parse_verb_test():
vrb_list = [('of', 'stop'), ('from', 'stop'), ('go', 'verb'), ('north', 'direction')]
assert_equal(parse_verb(vrb_list), ('go', 'verb'))
assert_equal(vrb_list, [('north', 'direction')])
assert_raises(ParserError, parse_verb, vrb_list)
它给了我以下输出:
.........E...
======================================================================
ERROR: tests.parser_tests.parse_verb_test
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/vsevolod/Repositories/ex48/tests/parser_tests.py", line 20, in parse_verb_test
assert_raises(ParserError, parse_verb, vrb_list)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 471, in assertRaises
callableObj(*args, **kwargs)
File "/Users/vsevolod/Repositories/ex48/ex48/parser.py", line 40, in parse_verb
raise ParserError("Expected a verb next.")
TypeError: object.__new__() takes no parameters
----------------------------------------------------------------------
Ran 13 tests in 0.042s
FAILED (errors=1)
我还尝试去掉 assert_raises()
行并在函数之前使用 @raises(ParserError)
。它也不太奏效并导致相同的输出。
像这样创建一个单独的测试有助于消除错误:
def parse_verb_fail():
fail_list = [('north', 'direction'), ('go', 'verb')]
assert_raises(ParserError, parse_verb, fail_list)
但是现在这个测试被简单地忽略了。
我做错了什么?
最佳答案
我认为您的问题是 ParserError
没有接受字符串的构造函数(或者 ParserError
没有从 Exception
扩展并试图将字符串传递给基础对象的 init 方法...)。因此,当您尝试创建 ParserError
时,您得到的是 TypeError
而不是 ParserError
。由于您的 assert_raises()
没有预料到 TypeError
,所以它没有捕捉到它。
编辑:
查看您链接到的示例代码并进行尝试。你确定你有...
class ParserError(Exception): pass
...而不是...
class ParserError(object): pass
关于python - Nose 工具中的 assert_raises() 并没有真正起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192502/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!