2010-10-28 26 views
16

Tôi đang gặp sự cố khi sử dụng doctest với các lần nhập tương đối. Các giải pháp đơn giản chỉ là để loại bỏ các hàng nhập khẩu tương đối. Có ai khác không?Nhập khẩu tài liệu và tương đối

Nói rằng tôi có một gói phần mềm được gọi là ví dụ có chứa 2 file:

example/__init__.py

""" 
This package is entirely useless. 
>>> arnold = Aardvark() 
>>> arnold.talk() 
I am an aardvark. 
""" 

from .A import Aardvark 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

dụ/A.py

class Aardvark(object): 
    def talk(self): 
     print("I am an aardvark.") 

Nếu bây giờ tôi cố gắng

python example/__init__.py 

sau đó tôi nhận được lỗi

Traceback (most recent call last): 
    File "example/__init__.py", line 8, in <module> 
    from .A import Aardvark 
ValueError: Attempted relative import in non-package 
+0

Tôi sẽ loại bỏ việc nhập tương đối, nhiều hướng dẫn kiểu Python mạnh mẽ ngăn cản chúng, nhất là cấm chúng. –

+0

Tôi không nhận ra điều đó. Chúc mừng. –

Trả lời

11

Tạo một tập tin my_doctest_runner.py:

if __name__ == "__main__": 
    import doctest 
    import example 
    doctest.testmod(example) 

Execute my_doctest_runner.py để chạy doctests trong example/__init__.py:

$ python2.7 my_doctest_runner.py 
********************************************************************** 
File "/tmp/example/__init__.py", line 4, in example 
Failed example: 
    arnold.talk() 
Expected: 
    I am an aaardvark. 
Got: 
    I am an aardvark. 
********************************************************************** 
1 items had failures: 
    1 of 2 in example 
***Test Failed*** 1 failures. 
+0

Cảm ơn câu trả lời. Cuối cùng tôi đã kết thúc việc thay đổi nhập khẩu tương đối thành một cái tuyệt đối, (từ ví dụ. Aadvark nhập khẩu) dựa trên nhận xét của Jason Scheirer. –

1

Chỉ cần làm

from A import Aardvark 
+7

tốt, tôi sợ điều này phá vỡ python 3 khả năng tương thích. – chfw

Các vấn đề liên quan