Issue a warning, or maybe ignore it or raise an exception.
(message, category=None, stacklevel=1, source=None)
| 286 | |
| 287 | # Code typically replaced by _warnings |
| 288 | def warn(message, category=None, stacklevel=1, source=None): |
| 289 | """Issue a warning, or maybe ignore it or raise an exception.""" |
| 290 | # Check if message is already a Warning object |
| 291 | if isinstance(message, Warning): |
| 292 | category = message.__class__ |
| 293 | # Check category argument |
| 294 | if category is None: |
| 295 | category = UserWarning |
| 296 | if not (isinstance(category, type) and issubclass(category, Warning)): |
| 297 | raise TypeError("category must be a Warning subclass, " |
| 298 | "not '{:s}'".format(type(category).__name__)) |
| 299 | # Get context information |
| 300 | try: |
| 301 | if stacklevel <= 1 or _is_internal_frame(sys._getframe(1)): |
| 302 | # If frame is too small to care or if the warning originated in |
| 303 | # internal code, then do not try to hide any frames. |
| 304 | frame = sys._getframe(stacklevel) |
| 305 | else: |
| 306 | frame = sys._getframe(1) |
| 307 | # Look for one frame less since the above line starts us off. |
| 308 | for x in range(stacklevel-1): |
| 309 | frame = _next_external_frame(frame) |
| 310 | if frame is None: |
| 311 | raise ValueError |
| 312 | except ValueError: |
| 313 | globals = sys.__dict__ |
| 314 | filename = "sys" |
| 315 | lineno = 1 |
| 316 | else: |
| 317 | globals = frame.f_globals |
| 318 | filename = frame.f_code.co_filename |
| 319 | lineno = frame.f_lineno |
| 320 | if '__name__' in globals: |
| 321 | module = globals['__name__'] |
| 322 | else: |
| 323 | module = "<string>" |
| 324 | registry = globals.setdefault("__warningregistry__", {}) |
| 325 | warn_explicit(message, category, filename, lineno, module, registry, |
| 326 | globals, source) |
| 327 | |
| 328 | def warn_explicit(message, category, filename, lineno, |
| 329 | module=None, registry=None, module_globals=None, |
no test coverage detected