Seite 1 von 1

Warum ändert sich die Klasse einer Exception?

Verfasst: Mittwoch 1. Dezember 2021, 21:05
von Tom64
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!

Re: Warum ändert sich die Klasse einer Exception?

Verfasst: Mittwoch 1. Dezember 2021, 21:10
von __deets__
Im zweiten Fall ist string nicht importiert. Warum auch immer.

Re: Warum ändert sich die Klasse einer Exception?

Verfasst: Mittwoch 1. Dezember 2021, 23:10
von __blackjack__
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.

Re: Warum ändert sich die Klasse einer Exception?

Verfasst: Donnerstag 2. Dezember 2021, 12:34
von Tom64
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!