我试图搜索一个函数的输出,它没有设置结果代码的礼貌。我可以通过混入stderr流中的“error:”字符串判断它失败了,该字符串通常位于不同的转换状态消息的中间。在
我有下面的列表理解方法,但是会扫描两次“error:”字符串。因为它只是重新扫描实际的错误线,它工作得很好,但它使我恼火,我不知道如何使用单一的扫描。工作代码如下:
errors = [e[e.find('error:'):] for e in err.splitlines() if 'error:' in e]
显然(也是错误的)简化方法是保存“find”结果
^{pr2}$但是,我得到“UnboundLocalError:赋值前引用了局部变量‘e’”。在理解中盲目地颠倒“for”也是失败的。这是怎么做到的?在
谢谢。肯特
但JBernave的解决方案对我很有效:
您可以将
'error'
的检查放在生成器表达式中:您所做的是创建一个嵌套的理解,并在第二个循环之前使用
e
变量,得到UnboundLocalError顺便说一句,您也可以使用regex来避免这种理解:
^{pr2}$也不需要拆分线条。在
对于完整的错误(对于
error:
部分),可以这样做:使用具有正常循环的生成器来执行此类需要状态的任务:
如果您需要这个列表,只需
list(errsplit(err))
。在列表理解并不是真正用来处理存储状态的,尝试在其中使用存储状态可能会很笨拙。在
也就是说,注意regex可能更好,正如@JBernardo所建议的那样。在
相关问题 更多 >
编程相关推荐