@@ -172,7 +172,7 @@ def __str__(self):
172172 1 / 0
173173 err = traceback .format_exception_only (X , X ())
174174 self .assertEqual (len (err ), 1 )
175- str_value = '<unprintable %s object>' % X . __name__
175+ str_value = '<exception str() failed>'
176176 if X .__module__ in ('__main__' , 'builtins' ):
177177 str_name = X .__qualname__
178178 else :
@@ -1171,19 +1171,45 @@ def test_syntax_error_various_offsets(self):
11711171 exp = "\n " .join (expected )
11721172 self .assertEqual (exp , err )
11731173
1174- def test_format_exception_only_qualname (self ):
1174+ def test_exception_qualname (self ):
11751175 class A :
11761176 class B :
11771177 class X (Exception ):
11781178 def __str__ (self ):
11791179 return "I am X"
1180- pass
1180+
11811181 err = self .get_report (A .B .X ())
11821182 str_value = 'I am X'
11831183 str_name = '.' .join ([A .B .X .__module__ , A .B .X .__qualname__ ])
11841184 exp = "%s: %s\n " % (str_name , str_value )
11851185 self .assertEqual (exp , err )
11861186
1187+ def test_exception_modulename (self ):
1188+ class X (Exception ):
1189+ def __str__ (self ):
1190+ return "I am X"
1191+
1192+ for modulename in '__main__' , 'builtins' , 'some_module' :
1193+ X .__module__ = modulename
1194+ with self .subTest (modulename = modulename ):
1195+ err = self .get_report (X ())
1196+ str_value = 'I am X'
1197+ if modulename in ['builtins' , '__main__' ]:
1198+ str_name = X .__qualname__
1199+ else :
1200+ str_name = '.' .join ([X .__module__ , X .__qualname__ ])
1201+ exp = "%s: %s\n " % (str_name , str_value )
1202+ self .assertEqual (exp , err )
1203+
1204+ def test_exception_bad__str__ (self ):
1205+ class X (Exception ):
1206+ def __str__ (self ):
1207+ 1 / 0
1208+ err = self .get_report (X ())
1209+ str_value = '<exception str() failed>'
1210+ str_name = '.' .join ([X .__module__ , X .__qualname__ ])
1211+ self .assertEqual (err , f"{ str_name } : { str_value } \n " )
1212+
11871213
11881214class PyExcReportingTests (BaseExceptionReportingTests , unittest .TestCase ):
11891215 #
0 commit comments