Write a doctest case that tests whether a StackTypeError is thrown when a TypedStack raises an exception when expected.
Write a doctest case that tests whether a StackTypeError is thrown
when a TypedStack raises an exception when expected.
from typing import List, TypeVar, Any
class EmptyStackError(Exception):
"""Exception raised when a pop on an empty stack is attempted."""
class StackTypeError(Exception):
"""Exception raised when an item of incorrect type is pushed."""
###############################################################################
# TypedStacks
###############################################################################
class TypedStack:
"""A last-in-first-out (LIFO) stack of items of a specific type."""
# === Private Attributes ===
# _items:
# The items stored in this stack. The end of the list represents
# the top of the stack.
# _type:
# The items stored on the stack must be of data type _type
_items: List
_type: TypeVar
def __init__(self, atype: TypeVar) -> None:
"""Initialize a new empty stack of atype data."""
self._items = []
self._type = atype
def is_empty(self) -> bool:
"""Return whether this stack contains no items."""
return self._items == []
def push(self, item: Any) -> None:
"""Add a new element to the top of this stack."""
# Rewrite the code as requested in part b.
self._items.append(item)
def pop(self) -> Any:
"""Remove and return the element at the top of this stack.
Raise an EmptyStackError if this stack is empty."""
if self.is_empty():
raise EmptyStackError
else:
return self._items.pop()
def push_all(s: TypedStack, lst: List) -> None:
"""
Push to s all members of lst compatible with the data type
of elements of s. Print any items that are the wrong type.
:param s: TypedStack
:param lst: list of items of various types
:return: None
"""
pass
Step by step
Solved in 2 steps