包含输入/输出的导入模块

Ino*_*ryy 0 python python-3.x python-unittest

我有一个python模块文件(func.py)和一个单元测试文件(f_test.py):

# func.py

def f(x):
    return x + 1

x = input("Enter x: "))

print("f(x): " + str(f(x)))
Run Code Online (Sandbox Code Playgroud)

# f_test.py

import unittest
from func import f

class MyTest(unittest.TestCase):
    def test(self):
        self.assertEqual(f(1), 2)
Run Code Online (Sandbox Code Playgroud)

当我运行时,f_test.py我希望测试套件能够被执行(成功).相反,我看到以下输入:

Finding files... done.
Importing test modules ... Enter x:
Run Code Online (Sandbox Code Playgroud)

如果我func.py从那时注释掉输入/输出行,我会得到预期的行为.如何在不修改的情况下实现它func.py

khe*_*ood 5

导入时func,将运行内部的所有代码.运行定义def f(x)...是创建函数的原因f.

您可以使用区分导入和运行文件if __name__=='__main__'.

例如:

# func.py

def f(x):
    return x + 1

if __name__ == '__main__':
    x = input("Enter x: "))
    print("f(x): " + str(f(x)))
Run Code Online (Sandbox Code Playgroud)

当你跑步时func.py,__name__=='__main__'将是真的.导入时,它将为false(__name__'func'改为).

  • 如果OP不明显:函数(和类等)定义是代码.编译模块不会创建`f`,只运行其中的代码会创建`f`.并且Python看不出你想要它运行的'f`'代码和'等待输入的代码'之间的任何区别,你没有; 这只是代码. (2认同)