Ok, tôi nghĩ rằng bất cứ điều gì tôi làm sai, nó có thể là hiển nhiên rõ ràng, nhưng tôi không thể tìm ra. Tôi đã đọc và đọc lại phần hướng dẫn về các gói và điều duy nhất tôi có thể hình dung là điều này sẽ không hoạt động vì tôi đang thực hiện nó trực tiếp. Đây là thiết lập thư mục:Gói Python?
eulerproject/
__init__.py
euler1.py
euler2.py
...
eulern.py
tests/
__init__.py
testeulern.py
Dưới đây là nội dung của testeuler12.py (module thử nghiệm đầu tiên tôi đã viết):
import unittest
from .. import euler12
class Euler12UnitTests(unittest.TestCase):
def testtriangle(self):
"""
Ensure that the triangle number generator returns the first 10
triangle numbers.
"""
self.seq = [1,3,6,10,15,21,28,36,45,55]
self.generator = euler12.trianglegenerator()
self.results = []
while len(self.results) != 10:
self.results.append(self.generator.next())
self.assertEqual(self.seq, self.results)
def testdivisors(self):
"""
Ensure that the divisors function can properly factor the number 28.
"""
self.number = 28
self.answer = [1,2,4,7,14,28]
self.assertEqual(self.answer, euler12.divisors(self.number))
if __name__ == '__main__':
unittest.main()
Bây giờ, khi tôi thực hiện điều này từ IDLE và từ lệnh dòng thời gian trong thư mục, tôi nhận được lỗi sau:
Traceback (most recent call last):
File "C:\Documents and Settings\jbennet\My Documents\Python\eulerproject\tests\testeuler12.py", line 2, in <module>
from .. import euler12
ValueError: Attempted relative import in non-package
tôi nghĩ vấn đề là kể từ khi tôi đang chạy nó trực tiếp, tôi không thể làm hàng nhập khẩu tương đối (vì __name__
thay đổi, và mơ hồ của tôi sự hiểu biết về các mô tả gói là __name__
là một phần của nó như thế nào nói nó gói trong), nhưng trong trường hợp đó những gì bạn guys đề nghị cho làm thế nào để nhập khẩu 'sản xuất' mã được lưu trữ 1 cấp lên từ mã kiểm tra?
Chỉ cần chọn và nhấp vào nút mẫu mã. Hoặc quấn nó trong '' –