0

在继续执行脚本的其余部分之前,我想让我的脚本验证电子邮件密码是否正确。我确定这只是一个简单的循环,但我想不出一种简单的方法来做到这一点。现在我的脚本是:

import arcpy, os, sys, time, subprocess, collections, datetime, smtplib
from datetime import datetime
print("This script will check your email password to verify it is  correct.")
usr = "your_email@gmail.com"
print("Please enter the password for " + usr + ":")
psw = raw_input()


def passwordcheck(usr,psw):
    server=smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(usr,psw)
    server.quit()
    print("Thank you. Password was correct.")


try:
    passwordcheck(usr,psw)

except:
    print("Password was incorrect.")

我想要一个简单的循环来允许用户 3 次尝试输入正确的密码,然后如果没有输入正确的密码,则终止脚本。

4

2 回答 2

1

这会更有意义。

def passwordcheck(usr,psw):
    server=smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    try:
        server.login(usr,psw)
        ret = True
    except:
        ret = False
    server.quit()
    return ret

for i in range(3):
    psw = raw_input("Please enter the password for " + usr + ": ")
    if passwordcheck(usr,psw) is False:
        print("Password was incorrect.")
    else:
        print("Thank you. Password was correct.")
        break

因为在更接近错误源的地方处理错误并采取相应的行动应该(是?)被认为是最佳实践。此外,考虑到您保持Password was incorrect在函数调用之外,您可能也应该保持正输出关闭(始终保持相似的输出彼此靠近)。

所以处理错误passwordcheck并处理函数的返回码。
对于 SO 来说,这可能不是一个典型的问题,因为您的初始代码没有任何问题,因为这更像是代码审查来考虑它。

于 2016-02-22T16:46:15.977 回答
0

像这样的事情应该这样做:

def passwordcheck(usr)
    print("This script will check your email password to verify it is  correct.")
    usr = "your_email@gmail.com"
    for i in range(3):
        print("Please enter the password for " + usr + ":")
        psw = raw_input()
        try:
            server=smtplib.SMTP('smtp.gmail.com:587')
            server.starttls()
            server.login(usr,psw)
            server.quit()
            print "Thank you. Password was correct."
            break
        except:
            if i < 3:
                print "Password was incorrect. Try again:"
                continue
        print "Password was incorrect. 3 times"
        break
于 2016-02-22T16:47:24.070 回答