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 に答える