为什么在Jupiter Notebook上执行单元测试时会出现AttributeError?

时间:2019-04-06 16:40:08

标签: python unit-testing jupyter-notebook

要解决在Jupiter Notebook上的练习,我需要对名为 city_function

的函数进行单元测试
def city_function(city, country):

   output = city.title() + ', ' + country.title()

   return output

此功能存储在“ city_functions.py”中。执行单元测试的代码存储在“ test_cities2.ipynb”中。我尝试了以下代码进行单元测试:

import unittest 



from city_functions import city_function


class CityCountryTestCase(unittest.TestCase):

    # Verify if city_function works



    def test_city_country_function(self):

        output = city_function('lisbon', 'portugal')

        self.assertEqual(output, 'Lisbon, Portugal')



unittest.main() 

我得到了类型为AttributeError的AttributeError:模块' main '没有属性。 我该怎么办才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

有一个不错的article,它描述了您的问题:

  

原因是unittest.main查看sys.argv,第一个参数是启动IPython或Jupyter的参数,因此有关内核连接文件的错误不是有效属性。将显式列表传递给unittest.main会阻止IPython和Jupyter查看sys.argv。传递exit=False将阻止unittest.main关闭kernell进程

您的最后一行应该是这样的:

unittest.main(argv=['first-arg-is-ignored'], exit=False)