我正在研究一些必须操纵unicode字符串的代码.我正在尝试为它编写doctests,但我遇到了麻烦.以下是说明问题的最小示例:
# -*- coding: utf-8 -*-
def mylen(word):
"""
>>> mylen(u"áéíóú")
5
"""
return len(word)
print mylen(u"áéíóú")
Run Code Online (Sandbox Code Playgroud)
首先,我们运行代码以查看预期的输出print mylen(u"áéíóú").
$ python mylen.py
5
Run Code Online (Sandbox Code Playgroud)
接下来,我们运行doctest来查看问题.
$ python -m
5
**********************************************************************
File "mylen.py", line 4, in mylen.mylen
Failed example:
mylen(u"áéíóú")
Expected:
5
Got:
10
**********************************************************************
1 items had failures:
1 of 1 in mylen.mylen
***Test Failed*** 1 failures.
Run Code Online (Sandbox Code Playgroud)
那我怎么测试mylen(u"áéíóú")评估为5?
我正在尝试使用scons来构建一个乳胶文档.特别是,我想让scons调用一个python程序,该程序生成一个包含一个表\ input {}的文件到主文档中.我查看了scons文档,但我不清楚我需要做什么.
我希望实现的基本上是你用这个makefile得到的东西:
document.pdf: table.tex
pdflatex document.tex
table.tex:
python table_generator.py
Run Code Online (Sandbox Code Playgroud)
我如何在scons中表达这一点?
我正在为一系列函数实现单元测试,这些函数都共享多个不变量.例如,调用具有两个矩阵的函数产生已知形状的矩阵.
我想编写单元测试来测试该属性的整个函数系列,而不必为每个函数编写单独的测试用例(特别是因为稍后可能会添加更多函数).
一种方法是迭代这些函数的列表:
import unittest
import numpy
from somewhere import the_functions
from somewhere.else import TheClass
class Test_the_functions(unittest.TestCase):
def setUp(self):
self.matrix1 = numpy.ones((5,10))
self.matrix2 = numpy.identity(5)
def testOutputShape(unittest.TestCase):
"""Output of functions be of a certain shape"""
for function in all_functions:
output = function(self.matrix1, self.matrix2)
fail_message = "%s produces output of the wrong shape" % str(function)
self.assertEqual(self.matrix1.shape, output.shape, fail_message)
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我从Dive Into Python中得到了这个想法.在那里,它不是正在测试的函数列表,而是已知输入 - 输出对的列表.这种方法的问题在于,如果列表中的任何元素未通过测试,则后面的元素不会被测试.
我查看了子类化unittest.TestCase并以某种方式提供了作为参数测试的特定函数,但据我所知,这阻止我们使用unittest.main(),因为没有办法将参数传递给测试用例.
我还看了动态地将"testSomething"函数附加到测试用例,使用带有lamdba的setattr,但是测试用例没有识别它们.
我怎样才能重写这个,所以扩展测试列表仍然是微不足道的,同时仍然确保每个测试都运行?
我想知道是否有办法让vim读取.gitignore文件并使用它们来确定自动完成文件名时不显示的选项.
例如,在python中工作,我不希望看到提供编辑的.pyc文件.我认为vim有自己的机制,我想知道如何从.gitignore加载信息.
我希望在特定的virtualenv中有一个与平常不同的PYTHONPATH.如何自动设置?我意识到可以破解bin/activate文件,是否有更好/更标准的方法?
我正在尝试做这样的事情:
sed 's/#REPLACE-WITH-PATH/'`pwd`'/'
Run Code Online (Sandbox Code Playgroud)
不幸的是,我错了:
sed: -e expression #1, char 23: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我有一个包含几个模块的git存储库,每个模块都在自己的子文件夹中,我想将它们拆分成独立的存储库,理想情况下尽可能多地保留它们各自的历史记录.这样做有规范的方法吗?
我想知道字符串上的'find'方法是用线性搜索实现的,还是python做了更复杂的事情.Python文档没有讨论实现细节,所以http://docs.python.org/library/stdtypes.html没有任何帮助.有人可以指点我相关的源代码吗?
来自Python文档:
sys.excepthook(type, value, traceback)此函数打印出给定的回溯和异常
sys.stderr.当引发异常并且未被捕获时,解释器
sys.excepthook使用三个参数调用,即异常类,异常实例和回溯对象.在交互式会话中,这发生在控制返回到提示之前; 在Python程序中,这发生在程序退出之前.可以通过为其分配另一个三参数函数来自定义这种顶级异常的处理sys.excepthook.
http://docs.python.org/library/sys.html
如何全局修改它以便默认操作始终是调用pdb?我可以更改配置文件吗?我不想包装我的代码来执行此操作.
GNU make通过最后调用自动删除隐式规则创建的中间文件rm filename.如果其中一个目标实际上是一个目录,这显然不起作用.请看以下示例:
.PHONY: all
all: test.target
%.target: tempdir.%
touch $@
tempdir.%:
mkdir -p $@
Run Code Online (Sandbox Code Playgroud)
make -n 揭示行动计划:
mkdir -p tempdir.test
touch test.target
rm tempdir.test
Run Code Online (Sandbox Code Playgroud)
是否有可能让GNU make正确处理中间目录?也许通过改变rm来rm -rf?