@@ -171,29 +171,32 @@ def _open_reader(obj):
171171 try :
172172 open_reader = cls .__open_reader__
173173 except AttributeError :
174- raise TypeError (f"{ cls .__name__ } can't be opened for reading" )
174+ cls_name = cls .__name__
175+ raise TypeError (f"{ cls_name } can't be opened for reading" ) from None
175176 else :
176177 return open_reader (obj )
177178
178179
179180def _open_writer (obj , mode ):
180181 cls = type (obj )
181182 try :
182- return cls .__open_writer__ ( obj , mode )
183+ open_writer = cls .__open_writer__
183184 except AttributeError :
184- if hasattr (cls , '__open_writer__' ):
185- raise
186- raise TypeError (f"{ cls .__name__ } can't be opened for writing" )
185+ cls_name = cls .__name__
186+ raise TypeError (f"{ cls_name } can't be opened for writing" ) from None
187+ else :
188+ return open_writer (obj , mode )
187189
188190
189191def _open_updater (obj , mode ):
190192 cls = type (obj )
191193 try :
192- return cls .__open_updater__ ( obj , mode )
194+ open_updater = cls .__open_updater__
193195 except AttributeError :
194- if hasattr (cls , '__open_updater__' ):
195- raise
196- raise TypeError (f"{ cls .__name__ } can't be opened for updating" )
196+ cls_name = cls .__name__
197+ raise TypeError (f"{ cls_name } can't be opened for updating" ) from None
198+ else :
199+ return open_updater (obj , mode )
197200
198201
199202def vfsopen (obj , mode = 'r' , buffering = - 1 , encoding = None , errors = None ,
0 commit comments