2016-01-06 3 views
0

Я получаю KeyError: 'E-mail'. Но не может найти проблему. Я попробовал readfp(), а также использовал полный путь к файлу. my_file = (os.path.join(os.getcwd(),'config.ini')). Но ничего не работает.Python: ConfigParser.NoSectionError: Без рубрики: 'E-mail'

Вот код.

import configparser 
import sys 
import xml.etree.ElementTree as ET 
import time 
import smtplib 
import os 

def usage(code): 
    sys.stderr.write("usage:\n") 
    sys.stderr.write(" " + sys.argv[0] + " <xml file with addresses> <subject> <file with message body>\n") 
    sys.exit(code) 


cfg = configparser.ConfigParser() 
cfg.read('config.ini') 

server = cfg.get('E-mail', 'server') 
login = cfg.get('E-mail', 'login') 
from_addr = cfg.get('E-mail', 'from') 
password = cfg.get('E-mail', 'password') 

if len(sys.argv) < 4: 
    usage(1) 

src_xml = sys.argv[1] 
subject = sys.argv[2] 
msg_file = sys.argv[3] 

server = smtplib.SMTP(server) 
server.ehlo() 
server.starttls() 
server.login(login, password) 

with open(msg_file) as f: 
    msg_text = f.read() 

tree = ET.parse(src_xml) 
root = tree.getroot() 

for p in root: 
    if 'email' in p.attrib: 
    to_addr = p.attrib['email'] 
    msg = "\r\n".join([ 
     "From: " + from_addr, 
     "To: " + to_addr, 
     "Subject: " + subject, 
     "", 
     msg_text 
    ]) 
    server.sendmail(from_addr, to_addr, msg) 

server.quit() 

И вот ошибка, которую я получаю.

Traceback (most recent call last): 
    File "C:\Users\Isuru\AppData\Local\Programs\Python\Python35-32\lib\configparser.py", line 1135, in _unify_values 
    sectiondict = self._sections[section] 
KeyError: 'E-mail' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Users\Isuru\Desktop\script\MailSender.py", line 17, in <module> 
    server = cfg.get('E-mail', 'server') 
    File "C:\Users\Isuru\AppData\Local\Programs\Python\Python35-32\lib\configparser.py", line 778, in get 
    d = self._unify_values(section, vars) 
    File "C:\Users\Isuru\AppData\Local\Programs\Python\Python35-32\lib\configparser.py", line 1138, in _unify_values 
    raise NoSectionError(section) 
configparser.NoSectionError: No section: 'E-mail' 

Это файл config.ini.

[E-mail] 
server=********:465 
login=***********.com 
[email protected] 
password=****** 

Я пробовал много одинаковых вопросов в StackOverflow. Но не повезло.

+1

Пожалуйста, удалите из своего сценария все остальные коды, оставив только минимальную парсинг-часть и посмотрите, не исчезла ли ошибка. Тогда, пожалуйста, разместите только эту часть здесь. – moooeeeep

+0

Ну, я попробовал. Проблема заключается в разборе деталей. – Isuru

+0

Попробуйте без тире. – PsyKzz

ответ

1

Я не могу воспроизвести вашу ошибку. Я бы зашел так далеко, что сказал, что в вашем файле анализа синтаксиса нет ничего плохого.

Возможно, у вас есть опечатка в вашем файле конфигурации. Вы уверены, что прочитали файл, который, по вашему мнению, читаете?

Я создал следующий конфигурационный файл conf.ini:

[E-mail] 
foo=hello 
bar=world 

И следующий Python 3 сценария test.py:

from configparser import ConfigParser 
parser = ConfigParser() 
parser.read("conf.ini") 
print(parser.get("E-mail", "foo")) 
print(parser.get("E-mail", "bar")) 

И когда я запускаю этот скрипт я получаю следующий результат:

$ python3 test.py 
hello 
world 

Все в порядке.