Warum ändert sich die Klasse einer Exception?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tom64
User
Beiträge: 2
Registriert: Mittwoch 1. Dezember 2021, 20:49
Wohnort: Berlin

Hallo Zusammen,

beim Umstellen von Python2 auf Python3 hatte ich vergessen das string.atoi nicht mehr geht.

Code: Alles auswählen

try :
	import sys
	print("PythonVersion = " + sys.version)
	version = "1.0.0.1"
	m=map(string.atoi,version.split("."))	
except Exception as error:
	print("Exception: " , error, type(error))
Wenn ich das als Script (Konsole unter Window10) ausführe, liefert es:
PythonVersion = 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)]
Exception: module 'string' has no attribute 'atoi' <class 'AttributeError'>

Wenn ich das gleiche in der Idle-Shell 3.9.9 ausführe, liefert es:
PythonVersion = 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)]
Exception: name 'string' is not defined <class 'NameError'>

Kann mir bitte jemand sagen, warum sich hierbei die Klasse der Exception von AttributeError auf NameError ändert?

Vielen Dank im voraus!
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Im zweiten Fall ist string nicht importiert. Warum auch immer.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Krass — `string.atoi()`. Das ist seit dem Übergang von Python 1.5 auf Python 2.0 vor 21 Jahren „deprecated“ und war in 1.5 ja schon nicht wirklich sinnvoll, weil redundant zum eingebauten, und damit viel offensichtlicheren `int()`.

Hier dann nicht den `list()`-Aufruf vergessen, weil `map()` ja keine Liste mehr liefert, sondern einen Iterator.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Tom64
User
Beiträge: 2
Registriert: Mittwoch 1. Dezember 2021, 20:49
Wohnort: Berlin

Die Antwort von User __deets__ ist hier definitiv die Ursache: importiert man string explizit, dann sind die Ausgaben identisch.
Das hatte ich übersehen - 'Warum auch immer' :? . Dabei sagt der Exception-Text im Grunde genau das. Danke an Alle!
Antworten