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()
?
答案 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
而不是手工编写所有这些内容。