@@ -1145,6 +1145,12 @@ def raises(expected_exception, *args, **kwargs):
1145
1145
...
1146
1146
>>> assert str(exc_info.value) == "value must be <= 10"
1147
1147
1148
+ Or you can use the keyword argument ``match_info`` to assert that the
1149
+ exception contains a certain text::
1150
+
1151
+ >>> with raises(ValueError, match_info='must be 0'):
1152
+ ... if value != 0:
1153
+ ... raise ValueError("value must be 0 or None")
1148
1154
1149
1155
Or you can specify a callable by passing a to-be-called lambda::
1150
1156
@@ -1194,11 +1200,15 @@ def raises(expected_exception, *args, **kwargs):
1194
1200
raise TypeError (msg % type (expected_exception ))
1195
1201
1196
1202
message = "DID NOT RAISE {0}" .format (expected_exception )
1203
+ match_info = None
1197
1204
1198
1205
if not args :
1199
1206
if "message" in kwargs :
1200
1207
message = kwargs .pop ("message" )
1201
- return RaisesContext (expected_exception , message )
1208
+ if "match_info" in kwargs :
1209
+ match_info = kwargs .pop ("match_info" )
1210
+ message += " with text '{0}'" .format (match_info )
1211
+ return RaisesContext (expected_exception , message , match_info )
1202
1212
elif isinstance (args [0 ], str ):
1203
1213
code , = args
1204
1214
assert isinstance (code , str )
@@ -1222,9 +1232,10 @@ def raises(expected_exception, *args, **kwargs):
1222
1232
pytest .fail (message )
1223
1233
1224
1234
class RaisesContext (object ):
1225
- def __init__ (self , expected_exception , message ):
1235
+ def __init__ (self , expected_exception , message , match_info ):
1226
1236
self .expected_exception = expected_exception
1227
1237
self .message = message
1238
+ self .match_info = match_info
1228
1239
self .excinfo = None
1229
1240
1230
1241
def __enter__ (self ):
@@ -1243,6 +1254,8 @@ def __exit__(self, *tp):
1243
1254
exc_type , value , traceback = tp
1244
1255
tp = exc_type , exc_type (value ), traceback
1245
1256
self .excinfo .__init__ (tp )
1257
+ if self .match_info and not self .match_info .lower () in str (self .excinfo ).lower ():
1258
+ pytest .fail (self .message )
1246
1259
suppress_exception = issubclass (self .excinfo .type , self .expected_exception )
1247
1260
if sys .version_info [0 ] == 2 and suppress_exception :
1248
1261
sys .exc_clear ()
0 commit comments