我想要一个函数,is_just_started
其行为类似于以下内容:
>>> def gen(): yield 0; yield 1
>>> a = gen()
>>> is_just_started(a)
True
>>> next(a)
0
>>> is_just_started(a)
False
>>> next(a)
1
>>> is_just_started(a)
False
>>> next(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> is_just_started(a)
False
如何实现此功能?
我看了看.gi_running
属性,但它似乎用于其他用途。
如果我知道需要发送到生成器的第一个值,则可以执行以下操作:
def safe_send(gen, a):
try:
return gen.send(a)
except TypeError as e:
if "just-started" in e.args[0]:
gen.send(None)
return gen.send(a)
else:
raise
但是,这似乎很可恶。
这仅适用于Python 3.2+:
>>> def gen(): yield 0; yield 1
...
>>> a = gen()
>>> import inspect
>>> inspect.getgeneratorstate(a)
'GEN_CREATED'
>>> next(a)
0
>>> inspect.getgeneratorstate(a)
'GEN_SUSPENDED'
>>> next(a)
1
>>> inspect.getgeneratorstate(a)
'GEN_SUSPENDED'
>>> next(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> inspect.getgeneratorstate(a)
'GEN_CLOSED'
因此,请求的功能是:
import inspect
def is_just_started(gen):
return inspect.getgeneratorstate(gen) == inspect.GEN_CREATED:
出于好奇,我研究了CPython以弄清它是如何确定的……显然,它看起来generator.gi_frame.f_lasti
是“最后尝试的指令在字节码中的索引”。如果是,-1
那么它还没有开始。
这是py2版本:
def is_just_started(gen):
return gen.gi_frame is not None and gen.gi_frame.f_lasti == -1
问题内容: 我只是运行了一个简单的MySQL CREATE TABLE语句,该语句产生了这一行 “查询确定,受影响的行为0,警告为1(0.07秒)。” 但是,它实际上并没有告诉我警告是什么。您如何查看刚刚发生的警告的内容?我正在使用MySQL 5.1,如果有帮助的话。我在网上唯一发现的是“ SHOW WARNINGS;但这只会产生 “空集(0.00秒)。” 问题答案: 是我知道的唯一方法,但是必须
assertEquals(“Amsterdam,Noord-Holland”,Driver.FindElement(by.id(“van”)).getText()); 然而,这导致: org.junit.comparisonfailure:预期:<[荷兰阿姆斯特丹]>但实际:<[]> 所以看起来比较失败是正确的,但我不知道为什么我不能断言我在屏幕上看到的东西。 我正在使用Java、Selenium
我刚刚从Windows 8升级到Windows 10(都是64位),我之前的带有用于Android开发的ADT插件的Eclipse Juno不再启动。 我所能看到的只是鼠标指针显示某些内容正在加载几秒钟,然后没有其他反应。 我所尝试的 < li >重命名< code>eclipse.ini以让它重新创建它:甚至没有重新创建它,所以将其重新命名。 < li >在Eclipse exe上打开了“Win
问题内容: 如何撤消最近执行的mysql查询? 问题答案: 如果将表类型定义为InnoDB,则可以使用事务。您将需要set ,并且可以在发出之后或在查询或会话结束时提交或取消交易。
cmf_is_mobile() 功能 判断是否为手机访问 参数 无 返回 boolean
问题内容: 如果所有数据被意外删除,是否可以将表恢复为上一次数据。 问题答案: 还有另一种解决方案,如果服务器上有活动的二进制日志,则可以使用 用它生成一个sql文件 然后搜索您缺少的行。如果您没有激活它,则没有其他解决方案。下次进行备份。
我的angular应用程序使用了系列文章中概述的承载令牌http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/.我遵循分叉示例,在访问令牌过期时(通过401 http代码)无缝刷新令牌。 我的问题是,如何根据确定的角色来确定承载令牌是否过期或只是未经授权?
问题内容: 有谁知道如何修理它。我正在使用Mac OS 10.8.2 问题答案: 在Python 3中是一个函数;它应该是: 正确安装或使用新版本(如果存在错误)。 在Python 3.3上工作正常。