【问题标题】:Testing python programs without using python shell在不使用 python shell 的情况下测试 python 程序
【发布时间】:2017-06-21 00:32:29
【问题描述】:

我想轻松测试我的 python 程序,而无需经常使用 python shell,因为每次修改程序时都必须退出,重新进入 python shell 并再次导入程序。我正在使用带有 OSX 的 2012 Macbook pro。我有以下代码:

import sys

def read_strings(filename):
    with open(filename) as file:
        return file.read().split('>')[1:0]

file1 = sys.argv[1]
filename = read_strings(file1)

基本上我想读入并拆分一个包含以下内容的 txt 文件:

id1>id2>id3>id4

我将这个输入到我的命令行中:

pal-nat184-102-127:python_stuff ceb$ python3 program.py string.txt

但是,当我在命令行上尝试 sys.argv 方法时,我的程序什么也没有返回。这是测试代码的好方法吗,有人能指出正确的方向吗?

这就是我想要发生的事情:

pal-nat184-102-127:python_stuff ceb$ python3 program.py string.txt

['id1', 'id2', 'id3', 'id4']

【问题讨论】:

  • 1.从哪里退出并在哪里重新导入? 2. 是的,从 shell 运行脚本/测试套件是一种常用的测试方法。 3. 当然它不会返回任何东西,因为你没有告诉它返回任何东西——你期望的结果是什么?

标签: python-3.x


【解决方案1】:

让我们一块一块地看:

但是,当我在命令行上尝试 sys.argv 方法时,我 程序什么也不返回

您的程序的最终结果是将一个字符串写入变量文件名。让程序“返回”一个值有点奇怪。通常,您希望程序将其打印出来或将某些内容保存到文件中。我猜如果你修改你的程序添加,它会减轻你的调试,

print (filename)

最后:您将能够看到程序的结果。

谁能指出我正确的方向?

另一个调试说明:编写 .py 文件可能很有用,这样它们就可以在命令行或 python shell 中独立运行。您当前如何构建代码,这将工作得不太好。 (启动 shell 然后导入文件会导致错误,因为 sys.argv[1] 没有定义。)

对此的解决方案是将代码的底部更改如下:

if __name__ == '__main__':
    file1 = sys.argv[1]
    filename = read_strings(file1)

顶部的 if 守卫说:“如果作为独立脚本运行,则运行我下方的内容。如果您从其他地方导入我,则不要执行我下方的内容。”

如果我误解了您的问题,请随时在下面跟进。

【讨论】:

    【解决方案2】:

    你永远不会对read_strings 的结果做任何事情。试试:

    print(read_strings(file1))
    

    【讨论】:

    • 小注:在 Python 3 中,print 不再是语句,而是函数。您需要使用括号: print(read_strings(file1)) 而不是 print read_strings(file1)。
    • 谢谢,我还没有接触过 Python 3,所以我很感激你的提醒!
    • 我明白了。当我使用 print(read_strings(file1)) 时,输出如下:[] ...但是我希望得到这个输出:['id1','id2','id3','id4']。跨度>
    • @cebach561 我认为您在调用.split() 后所做的切片是问题所在。删除最后的[1:0]。这能解决你的问题吗?
    猜你喜欢
    • 2014-05-03
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2016-08-14
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多