我需要在另一个函数中使用在特定函数内定义的变量。通常我会使用return,但它似乎没有在这里工作。这是一个我应该使用全局变量的实例吗?它似乎不起作用,因为我想要返回的变量位于try语句中的if语句中。
在这个函数中,我打开一个包含一系列由行分隔的密码的行文件。我需要返回一个用于登录远程主机的密码。
def password():
try:
words = open('words', 'r')
for i, line in enumerate(words):
if i == 999:
otpw = line.replace('999','')[1:]
return otpw
except IOError:
print "error opening otpw document. Contact"
words.close()
finally:
words.close()
password()
谢谢!
答案 0 :(得分:1)
选项1: 如果您希望程序在异常时失败,您只需使用with语句打开该文件即可。它甚至会在异常时关闭文件。这通常是更好的方法。
def password():
otpw = None
with open('words', 'r') as words:
#Do whatever to get your password
for i, line in enumerate(words):
if i == 999:
otpw = line.replace('999','')[1:]
return otpw
现在,当您调用password()时,它将返回密码或因异常而失败。
选项2: 如果您确实想要自己处理异常,请先将otpw设置为None,然后将其返回到finally。
def password():
otpw = None
try:
words = open('words', 'r')
for i, line in enumerate(words):
if i == 999:
otpw = line.replace('999','')[1:]
break
except IOError:
print "error opening otpw document. Contact"
words.close()
finally:
words.close()
return otpw
当你调用password()时检查返回值。如果是None,你知道你有错误,否则用pwd做一些事情。我只是根据你的评论调用它,otpw,以匹配任何可能使用该名称的代码
otpw = password()
if otpw == None:
print "Error retrieving password"
else:
#do something with pwd
答案 1 :(得分:0)
def password():
try:
optw = 'exception'
words = open('words', 'r')
for i, line in enumerate(words):
if i == 999:
otpw = line.replace('999','')[1:]
return otpw
except IOError:
print "error opening otpw document. Contact"
words.close()
finally:
return optw
words.close()
password()
我在代码中添加了一些修改,现在如果你运行它,它将总是返回一些东西。如果达到异常,它将返回字符串'exception'。