尝试返回一个变量以在另一个函数中使用,但无法执行此操作

时间:2014-09-24 16:55:25

标签: python global

我需要在另一个函数中使用在特定函数内定义的变量。通常我会使用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()

谢谢!

2 个答案:

答案 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'。