問題が何であるか少し混乱しています...ここに私がまとめたコードがあります。
>>> import optparse
>>> import shlex
>>> parser = optparse.OptionParser()
>>> parser.add_option('--build',type=str,default=None)
<Option at 0x...: --build>
--build
「コマンドライン」でオプションを提供します。
>>> options, args = parser.parse_args(shlex.split("--build=None"))
>>> print options
{'build': 'None'}
>>> options.build is None
False
>>> options, args = parser.parse_args(shlex.split(""))
--build
「コマンドライン」にオプションが指定されていません
>>> print options
{'build': None}
>>> options.build is None
True
ご覧のとおり--build
、コマンドラインで が指定されていない場合は、デフォルトでNone
(つまり、 type のオブジェクトNoneType
) になります。build が提供され、文字列 == "None" の場合、文字列 "None" が返されます。
コマンドラインで渡すこと--build=None
に固執するなら、そのフラグを使って optparse に何をさせたいのか、少しあいまいです。たとえば、パスの場合、パス None が存在するかどうかを確認する関数を作成できます。
import os.path
def path_exists(p):
if(os.path.exists(p)): return p
else: return None
...
parser.add_option('--build',type=path_exists,default=None)
もちろん、path_exists は、アプリケーションに必要なだけ複雑にすることができます。