Permalänk
Medlem

Migrera py2 till py3

Hej,

Någon vänlig själ som kan förklara varför jag får Error local variable 'io' referenced before assignment när jag försöker använda mig utav io.StringIO i python3? Antar att det har med str och bytes att göra?.

class MapString: def __init__(self, channelid, titleRegex, strm, src): self.channelid = channelid self.titleRegex = titleRegex self.strm = strm self.src = src @staticmethod def Parse(xmlstr, logCall=deb): rstrm = '' categories={} if logCall: logCall('[UPD] Parse map file') io = io.StringIO(xmlstr) context = ElementTree.iterparse(io, events=("start", "end")) event, root = next(context) elements_parsed = 0 if logCall: logCall('[UPD] %-35s %-50s %s' % ('ID' , 'TITLE_REGEX', 'STRM')) result = list() for event, elem in context: if event == "end": if elem.tag == "channel": aid = elem.get("id") atitle = elem.get("title") astrm = elem.get("strm") if logCall: logCall('[UPD] %-35s %-50s %s' % (aid, atitle, astrm)) result.append(MapString(aid, atitle, astrm, '')) if elem.tag == "map": rstrm = elem.get("strm") if elem.tag == "category": category_tags_set = set() category_name = elem.get("name") category_tags = elem.get("tags").split('|') for tag in category_tags: category_tags_set.add(('' + tag)) categories[category_name] = category_tags_set #if logCall: #logCall('\n') #if rstrm != '': #logCall('[UPD] Stream rule = %s' % rstrm) return [result, rstrm, categories]

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av M89:

Hej,

Någon vänlig själ som kan förklara varför jag får Error local variable 'io' referenced before assignment när jag försöker använda mig utav io.StringIO i python3? Antar att det har med str och bytes att göra?.

class MapString: def __init__(self, channelid, titleRegex, strm, src): self.channelid = channelid self.titleRegex = titleRegex self.strm = strm self.src = src @staticmethod def Parse(xmlstr, logCall=deb): rstrm = '' categories={} if logCall: logCall('[UPD] Parse map file') io = io.StringIO(xmlstr) context = ElementTree.iterparse(io, events=("start", "end")) event, root = next(context) elements_parsed = 0 if logCall: logCall('[UPD] %-35s %-50s %s' % ('ID' , 'TITLE_REGEX', 'STRM')) result = list() for event, elem in context: if event == "end": if elem.tag == "channel": aid = elem.get("id") atitle = elem.get("title") astrm = elem.get("strm") if logCall: logCall('[UPD] %-35s %-50s %s' % (aid, atitle, astrm)) result.append(MapString(aid, atitle, astrm, '')) if elem.tag == "map": rstrm = elem.get("strm") if elem.tag == "category": category_tags_set = set() category_name = elem.get("name") category_tags = elem.get("tags").split('|') for tag in category_tags: category_tags_set.add(('' + tag)) categories[category_name] = category_tags_set #if logCall: #logCall('\n') #if rstrm != '': #logCall('[UPD] Stream rule = %s' % rstrm) return [result, rstrm, categories]

Tycker det snarare låter som att du glömt att importera io (eftersom den uppenbart inte vet vad io är), men det borde inte ha med python 2 vs python 3 att göra?

Edit: eller om möjligen det som ställer till det är att du tilldelar instansen till en variabel med namnet io, samtidigt som io är namnet på en modul.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

Tycker det snarare låter som att du glömt att importera io (eftersom den uppenbart inte vet vad io är), men det borde inte ha med python 2 vs python 3 att göra?

Edit: eller om möjligen det som ställer till det är att du tilldelar instansen till en variabel med namnet io, samtidigt som io är namnet på en modul.

Stort tack! det var variabeln med namnet io som var fel, var även tvungen att använda mig av io.BytesIO för att omvandla värdet till str.

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B