# 升级 optparse 代码

起初，`argparse` 模块尝试通过 `optparse` 来维持兼容性。 但是，`optparse` 很难透明地进行扩展，特别是那些为支持新的 `nargs=` 描述方式和更好的用法消息所需的修改。 当 `optparse` 中几乎所有内容都已被复制粘贴或打上补丁时，维持向下兼容看来已是不切实际的。

`argparse` 模块在许多方面对 `optparse` 模块进行了增强，包括：

- 处理位置参数。

- 支持子命令。

- 允许替代选项前缀例如 `+` 和 `/`。

- 处理零个或多个以及一个或多个风格的参数。

- 生成更具信息量的用法消息。

- 提供用于定制 `type` 和 `action` 的更为简单的接口。

从 `optparse` 到 `argparse` 的部分升级路径:

- 将所有 `optparse.OptionParser.add_option()` 调用替换为 `ArgumentParser.add_argument()` 调用。

- 将 `(options, args) = parser.parse_args()` 替换为 `args = parser.parse_args()` 并为位置参数添加额外的 `ArgumentParser.add_argument()` 调用。 请注意之前所谓的 `options` 在 `argparse` 上下文中被称为 `args`。

- 通过使用 `parse_intermixed_args()` 而非 `parse_args()` 来替换 `optparse.OptionParser.disable_interspersed_args()`。

- 将回调动作和 `callback_*` 关键字参数替换为 `type` 或 `action` 参数。

- 将 `type` 关键字参数字符串名称替换为相应的类型对象（例如 int, float, complex 等）。

- 将 `optparse.Values` 替换为 `Namespace` 并将 `optparse.OptionError` 和 `optparse.OptionValueError` 替换为 `ArgumentError`。

- 将隐式参数字符串例如使用标准 Python 字典语法的 `%default` 或 `%prog` 替换为格式字符串，即 `%(default)s` 和 `%(prog)s`。

- 将 OptionParser 构造器 `version` 参数替换为对 `parser.add_argument('--version', action='version', version='<the version>')` 的调用。