如何将变量分配给两个对象?
问题描述:
g = None
try:
g = open("mydata.txt", "r")
except IOError:
print(’Python could not open the file mydata.txt.’)
if g:
try:
lines = g.readlines()
print("The list of lines is:")
print(lines)
except IOError:
print(’Error while trying to read the data in the file.’)
这是一个在我的教科书中使用Python中的try
和except
的示例。该教科书声称“g
被初始绑定为None
(在if
声明的布尔上下文中被视为False
)”。根据我的理解,g
已经包含了从open
函数返回的文件对象,在if
语句的布尔上下文中它怎么会被当作False
?如何将变量分配给两个对象?
答
它不能同时为None
和文件的内容;这个想法是,如果open()
失败,并且第一个Except
块被命中,那么g will still be equal to
无。
因此,如果open()
进程成功完成,那么if g
语句将评估为true,并且该函数将继续。如果open()
进程失败,g
仍将等于None
,因此if g
语句将评估为false,并且readlines()
部分将被跳过。
答
g
从持有None
到一个文件对象发生变化时,它AT的重新分配:
g = open("mydata.txt", "r")
它没有“有2个对象”一次。
答
所以理解Python是一种解释语言这是声明
执行的语句时,该代码被编译,编译器知道g
从g = None
None
是很重要的。但编译器不断阅读更多的行。当它读取g = open("mydata.txt", "r")
那么变量g
现在重新分配以保存文件对象而不再是none
感谢您的回复。但是'g'如何在if语句中重新分配'None'?教科书说'g'在if语句的布尔上下文中被视为False。 –
@alexlau它永远不会被重新分配回来。 'try' /'catch'的目的是捕获如果打开文件无法打开的异常。如果'open'抛出异常,重新分配不会发生,所以当'try'退出时'g'仍然保持'None'。 '如果g:'基本上检查打开是否成功。 – Carcigenicate