小编Mar*_*eld的帖子

打印时IOError输入/输出错误

我继承了一些代码,这些代码由于在打印调用期间引发输入/输出错误而定期(随机)失败.我试图确定引发异常的原因(或至少,更好地理解它)以及如何正确处理它.

执行以下Python行时(在2.6.6解释器中,在CentOS 5.5上运行):

print >> sys.stderr, 'Unable to do something: %s' % command
Run Code Online (Sandbox Code Playgroud)

引发异常(省略回溯):

IOError: [Errno 5] Input/output error
Run Code Online (Sandbox Code Playgroud)

对于上下文,这通常是当时较大的函数尝试执行的操作:

from subprocess import Popen, PIPE
import sys
def run_commands(commands):
    for command in commands:
        try:
            out, err = Popen(command, shell=True, stdout=PIPE, stderr=PIPE).communicate()
            print >> sys.stdout, out
            if err:
                raise Exception('ERROR -- an error occurred when executing this command: %s --- err: %s' % (command, err))
        except:
            print >> sys.stderr, 'Unable to do something: %s' % command
run_commands(["ls", "echo foo"])
Run Code Online (Sandbox Code Playgroud)

>> …

python io stdout ioerror

20
推荐指数
2
解决办法
2万
查看次数

Python API兼容性检查器

在我目前的工作环境中,我们会生成大量内部使用的Python包(如果不是100则为10s).每个包都有一些依赖关系,通常是内部和外部包的混合,并且这些依赖关系中的一些是共享的.

当我们接近依赖地狱时,更新依赖关系变成一个耗时的过程.虽然我们关心新版本可能引入的功能更改,但重要的是(如果不是更多)重要的是API更改会破坏代码.

尽管针对较新版本的依赖项运行单元/集成测试有助于我们捕获一些问题,但我们的覆盖范围并不足以达到100%才能使其成为一个强大的策略.发行说明和更改日志有助于识别高级别的主要更改,但这些更改很少存在于内部开发的工具中,或者详细了解新版本对(公共)API的影响.

我正在寻找其他方法来自动化这个过程.

我希望能够自动比较Python包的两个版本并报告它们之间的API差异.特别是这将包括向后不兼容的更改,例如删除函数/方法/类/模块,向函数/方法/类添加位置参数以及更改函数/方法返回的项数.作为开发人员,基于此生成的报告,我应该对此版本更改将引入的代码级别含义有更深入的了解,因此需要时间来集成它.

在其他地方,我们使用C++ abi-compliance-checker,并且正在查看Java api-compliance-checker以帮助完成此过程.是否有适用于Python的类似工具?我发现了大量的lint/analysis/refactor工具,但没有提供这种功能.据我所知,Python的动态类型将无法提供全面的报告.

如果这样的工具不存在,那么它们是否可以帮助实现解决方案?例如,我当前的方法是使用ast.NodeVisitor遍历包并构建一个树,其中每个节点代表一个模块/类/方法/函数,然后将该树与同一个包的另一个版本的树进行比较.

编辑:自发布问题以来,我发现pysdiff涵盖了我的一些要求,但有兴趣看到其他选择.

编辑:还发现Upstream-Tracker就是我想最终得到的那种信息的一个很好的例子.

python backwards-compatibility

7
推荐指数
2
解决办法
510
查看次数

标签 统计

python ×2

backwards-compatibility ×1

io ×1

ioerror ×1

stdout ×1