了解尝试,除了__builtin__

时间:2015-11-07 00:45:03

标签: python-2.7 python-3.x try-catch

Python新手,尚未使用或遇到__builtin__,并对以下代码实际执行的内容感到好奇:

import sys

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

username = input("username: ")
password = input("password: ")

此代码是否用于基本检查脚本是否使用Python 2或Python 3运行,如果是Python 2,input()是否转换为raw_input()

1 个答案:

答案 0 :(得分:2)

如果后者存在,input()引用raw_input(),这是一个写得很差的代码。这使它与Python 2和Python 3兼容。更简单的方法是:

try:
    input = raw_input
except NameError:
    pass

username = input("username: ")
password = input("password: ")

__builtin__模块是所有内置对象(如input()raw_input())的模块。但在这种情况下我们不需要它。在Python 3.x中,这称为builtins,这就是为什么此代码的作者正在捕获ImportError

如果您需要一般这样做,最好使用six而不是手工编写所有这些内容。