我发现我在Python中使用了大量的上下文管理器.但是,我一直在测试使用它们的一些东西,我经常需要以下内容:
class MyTestCase(unittest.TestCase):
def testFirstThing(self):
with GetResource() as resource:
u = UnderTest(resource)
u.doStuff()
self.assertEqual(u.getSomething(), 'a value')
def testSecondThing(self):
with GetResource() as resource:
u = UnderTest(resource)
u.doOtherStuff()
self.assertEqual(u.getSomething(), 'a value')
Run Code Online (Sandbox Code Playgroud)
当这得到很多测试时,这显然会变得无聊,所以本着SPOT/DRY的精神(单点真相/不要重复自己),我想将这些位重构为测试setUp()和tearDown()方法.
然而,试图这样做会导致这种丑陋:
def setUp(self):
self._resource = GetSlot()
self._resource.__enter__()
def tearDown(self):
self._resource.__exit__(None, None, None)
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法来做到这一点.理想情况下,在每个测试方法的setUp()/ tearDown()不重复位中(我可以看到如何重复每个方法上的装饰器可以做到这一点).
编辑:将底层对象视为内部GetResource对象,将对象视为第三方对象(我们不会更改).
我已经重命名GetSlot为GetResourcehere-这比特定情况更通用 - 其中上下文管理器是对象打算进入锁定状态的方式.
如果我有一个函数/方法是一个框架的回调实现,并且不关心任何进一步的参数,它似乎在语法上是正确的,并且没有pylint/IDE投诉使用*_表示没有兴趣在任何进一步的论点.我认为这一点是向工具和其他开发人员表达这些参数当前不相关的意图.
To clarify I mean:
def my_callbacK_handler(a, b, *_):
...
Run Code Online (Sandbox Code Playgroud)
我似乎没有在野外使用这个习语 - 这是常见的,是否有例子,这是否存在已知问题?
对于那些不熟悉的人 - "_"表达了我对该符号不感兴趣的意图 - 它是由IDE和linters识别的python"dummy".
我需要创建一个工作,其中将需要Web上传(IE带有文件的帖子).有没有办法做到这一点?(我试过在网上搜索).请注意,有问题的文件可能非常大.
工作流程(为清晰起见):用户单击作业菜单中的构建,用户可以设置参数并进行上传,用户单击提交,并使用该文件作为源构建作业.
其他用例:使用POST操作远程启动作业以上载文件并设置参数.
我正在与以非OO方式编写的python 2.x API进行交互,它使用模块全局范围来处理一些内部状态驱动的东西.它在不再是单例的上下文中是必需的,修改原始代码(不是我们的代码)不是一种选择.
如果没有使用单独解释器的子进程运行,有没有什么方法可以关闭模块并与模块的多个实例交互(从而将其视为对象)?
我需要使用该模块来驱动2种不同的设置 - 它在内部似乎无法使用.
免责声明:请不要这样做.请在非常奇怪的情况下执行此操作 - 并尝试在执行此操作之前以其他方式更改情况.我这样做是为了应对在询问时无法改变的奇怪代码 - 不提供扩展更奇怪代码的方法.
我有一个使用子进程的python脚本:
import subprocess
print "Running stuff"
subprocess.check_call(["do_stuff.bat"])
print "Stuff run"
Run Code Online (Sandbox Code Playgroud)
如果这被命名为blah.py,我运行(从命令提示符):
python blah.py
Run Code Online (Sandbox Code Playgroud)
我将从do_stuff.bat(或我运行的任何东西)获得输出.
如果运行如下:
blah.py
Run Code Online (Sandbox Code Playgroud)
然后我没有得到do_stuff.bat的输出,只有print语句.
到目前为止在Windows Server 2003上看到.Python版本2.5.2(由于各种原因卡在那里).查看关联的文件类型操作,我看到:
Python.File ="C:\ Python25\python.exe""%1"%*
所以有人可以解释这个区别吗?
如果我将YouTube视频片段嵌入到iPython笔记本中:
from IPython.display import YouTubeVideo
YouTubeVideo("Pi9NpxAvYSs")
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将它嵌入到特定时间?所以1:47:03 - 1小时47分3秒?
list[s]是一个字符串.为什么这不起作用?
出现以下错误:
TypeError:list indices必须是整数,而不是str
list = ['abc', 'def']
map_list = []
for s in list:
t = (list[s], 1)
map_list.append(t)
Run Code Online (Sandbox Code Playgroud) 我有一些代码使用简单的tcp套接字设置来测试一些东西.我们运行pylint --errors-only我们的python文件,通常作为验证所有代码的方法.
但是,python套接字库文档(http://docs.python.org/library/socket.html)上给出的简单示例代码将输出:
************* Module SocketExample
E: 16: Instance of '_socketobject' has no 'recv' member
E: 18: Instance of '_socketobject' has no 'sendall' member
Run Code Online (Sandbox Code Playgroud)
文档显示了这些成员,代码运行和工作.
socket的目录也显示它们存在:
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> dir(s)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__weakref__', '_sock', 'accept', 'bind', 'close', 'connect', 'connect_ex', 'dup', 'family', 'fileno', 'getpeername', 'getsockname', 'getsockopt', 'gettimeout', 'listen', 'makefile', 'proto', 'recv', 'recv_into', 'recvfrom', 'recvfrom_into', 'send', 'sendall', …Run Code Online (Sandbox Code Playgroud) 我在Mac(OSX Lion)上安装了iPython + SciPy Superpack.
如果我使用matplotlib.pyplot进行绘图,它将弹出一个带有图形的窗口,然后关闭它以使ipython内核继续.
from matplotlib import pyplot as plt
plt.plot([1, 2, 3], [3, 6, 9])
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试内联(以--pylab inline或开头--pylab=inline)并导入pylab,而不是笔记本内部的图(我期望的),我得到一个外部窗口,它永远不会呈现任何东西.
仍在外部窗口中:
import pylab
pylab.plot([1, 2, 3], [3, 6, 9])
pylab.show()
Run Code Online (Sandbox Code Playgroud)
因为我已经启动笔记本ipython notebook --pylab=inline应该已经是这样,但如果我%pylab inline在一个单元格中使用并运行它,我得到帮助,上面相同的代码创建一个空白窗口,并挂起内核 - 我只能强制杀死窗户.这怎么办?
如何在javascript中的问号后获取网址值?
我想要以下行为:
if value is yes then 10+2
else if value is no then 10.
Run Code Online (Sandbox Code Playgroud)
我想输出警报消息.
<div class="col-xs-4 col-sm-4 col-md-4 text-center width100">
<a href="piccal.html" class="btn btn-success" id="yes">PIC Grant Calculator</a>
</div>
<div class="col-xs-4 col-sm-4 col-md-4 text-center width100">
<a href="piccal.html" class="btn btn-danger" id="no">PIC Grant Calculator</a>
</div>
<script>
if (value == no) {
alert('hello');
}
</script>
<script>
if (value == yes) {
alert('hi');
}
</script>
Run Code Online (Sandbox Code Playgroud) python ×7
hudson ×1
ipython ×1
javascript ×1
jenkins ×1
mapreduce ×1
matplotlib ×1
pylint ×1
subprocess ×1
unit-testing ×1
windows ×1