2025, Oct 17 00:31
configparser.NoSectionError क्यों आता है और pathlib पाथ के साथ इसे कैसे ठीक करें
Python में configparser.NoSectionError का वास्तविक कारण बैकस्लैश नहीं, बल्कि गायब सेक्शन है। जानें pathlib Path के साथ INI पढ़ते-लिखते समय add_section, get, set का सही उपयोग।
साधारण स्ट्रिंग पाथ से pathlib.Path पर जाते समय कई बार configparser.NoSectionError दिखता है और लगता है कि दोष Windows के बैकस्लैश का है। ऐसा नहीं है। यह अपवाद बताता है कि आप ऐसे सेक्शन से पढ़ या उसमें लिख रहे हैं जो अभी कॉन्फ़िगरेशन में बना ही नहीं है।
समस्या का सार
आप ConfigParser के साथ INI कॉन्फ़िग पढ़ते और लिखते हैं। पहले पाथ str के रूप में रखे जाते थे, फिर आपने pathlib का Path अपना लिया। अचानक configparser.NoSectionError: No section: दिखने लगता है। समय का मेल इसे WindowsPath की गलती जैसा दिखाता है, लेकिन असली वजह कहीं और है।
त्रुटि को दोहराने वाला न्यूनतम उदाहरण
from configparser import ConfigParser as IniCfg
from pathlib import Path as FsPath
ini = IniCfg()
# अभी कोई सेक्शन बनाया नहीं गया है।
# अगली पंक्ति configparser.NoSectionError उत्पन्न करेगी
ini.set('Paths', 'file', str(FsPath(r'C:\Users\Example\File.txt')))
with open('config.ini', 'w') as out_fh:
    ini.write(out_fh)
वास्तव में क्या हो रहा है
जब set() या get() किसी ऐसे सेक्शन को लक्ष्य बनाते हैं जो मौजूद नहीं है, तब configparser.NoSectionError उठता है। यह WindowsPath इस्तेमाल करने या पाथ स्ट्रिंग के बैकस्लैश के कारण नहीं होता। अपवाद सिर्फ यह बताता है कि वह सेक्शन अभी तक कॉन्फ़िगरेशन में जोड़ा नहीं गया है।
समाधान
set() या get() से पहले सेक्शन बना लें; उसके बाद Path का स्ट्रिंग रूप फाइल में लिखें और पढ़ते समय Path को फिर से बनाएँ।
from configparser import ConfigParser as IniCfg
from pathlib import Path as FsPath
ini = IniCfg()
ini.add_section('Paths')
ini.set('Paths', 'file', str(FsPath(r'C:\Users\Example\File.txt')))
with open('config.ini', 'w') as out_fh:
    ini.write(out_fh)
ini.read('config.ini')
path_obj = FsPath(ini.get('Paths', 'file'))
यह विवरण क्यों मायने रखता है
configparser.NoSectionError के स्रोत का गलत निदान आपको गलत समस्या के पीछे भटका देता है। यहाँ Windows पर पाथ हैंडलिंग ठीक है; विफलता दरअसल गायब कॉन्फ़िगरेशन संरचना की है। यदि कुछ श्रेणियाँ या सेक्शन वैकल्पिक हों और उपयोगकर्ता की पसंद के आधार पर अनुपस्थित हो सकते हों, तो किसी गैर-मौजूद सेक्शन के साथ इंटरैक्ट करने पर यही अपवाद अपेक्षित व्यवहार है।
मुख्य बातें
set() या get() से पहले सुनिश्चित करें कि सेक्शन मौजूद है। पाथ को str(path_obj) लिखकर सहेजें और पढ़ते समय Path(...) से पुनर्निर्मित करें। यह समझना कि NoSectionError किसी गायब सेक्शन का संकेत है—पाथ फ़ॉर्मैटिंग समस्या नहीं—आपके कॉन्फ़िगरेशन कोड को भरोसेमंद रखता है और Windows पाथ के साथ काम करते समय बेवजह की परेशानियों से बचाता है।
यह लेख StackOverflow पर प्रश्न (लेखक: AlMa) और Abuzar Mughal के उत्तर पर आधारित है।