開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のIV部(モジュール)のまとめ演習7(循環インポート)を解いてみる。
7.
recur1.py
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 X = 1 import recur2 Y = 2
recur2.py
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 from recur1 import X from recur1 import Y
入出力結果(Terminal)
$ python Python 2.7.2 (default, Feb 12 2012, 23:50:38) [GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import recur1 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "recur1.py", line 5, in <module> import recur2 File "recur2.py", line 5, in <module> from recur1 import Y ImportError: cannot import name Y >>> quit() $ python Python 2.7.2 (default, Feb 12 2012, 23:50:38) [GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import recur2 >>> quite() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'quite' is not defined >>> quit() $
import recur1というコードはエラーになって、import recur2というコードはエラーにならないのは、前者は循環インポートになっていて、後者は循環インポートになっていないから。
recur1モジュールをトップレベルファイルとして実行した場合にはエラーは発生しない。理由は、最初にインポートするのはrecur2モジュールだから。(すなわち上記の対話型コマンドプロンプトでのimport rucur2と同様の理由。)
逆にrecur2モジュールをトップレベルファイルとして実行した場合にはエラーが発生する。理由は、最初にインポートするのはrecur1モジュールだから。(すなわち、上記の対話型コマンドプロンプトでのimport recur1と同様の理由。)
入出力結果(Terminal)
$ ./recur1.py $ ./recur2.py Traceback (most recent call last): File "./recur2.py", line 4, in <module> from recur1 import X File "/Users/kamimura/Desktop/recur1.py", line 5, in <module> import recur2 File "/Users/kamimura/Desktop/recur2.py", line 5, in <module> from recur1 import Y ImportError: cannot import name Y $
0 コメント:
コメントを投稿