I tried to write a code that can distinguish the following four different errors.
- TypeError: The first parameter is not an integer;
- TypeError: The second parameter is not a string;
- ValueError: The value of the first parameter is not in the range of- 1to- 13; or
- ValueError: The value of the second parameter is not one of the strings in the set- {'s', 'h', 'c', 'd'}.
However, I only can get the first one to work but not the other three errors. I tried different ways to make it work, but still can't figure out what's wrong.
class Card: # One object of class Card represents a playing card
    rank = ['','Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King']
    suit = {'d':'Diamonds', 'c':'Clubs', 'h':'Hearts', 's':'Spades'}
    def __init__(self, rank=2, suit=0): # Card constructor, executed every time a new Card object is created
        if type(rank) != int:
            raise TypeError()
        if type(suit) != str:
            raise TypeError()
        if rank != self.rank:
            raise ValueError()
        if suit != 'd' or 'c' or 'h' or 's':
            raise ValueError()
        self.rank = rank
        self.suit = suit
    def getRank(self): # Obtain the rank of the card
        return self.rank
    def getSuit(self): # Obtain the suit of the card
        return Card.suit[self.suit]
    def bjValue(self): # Obtain the Blackjack value of a card
        return min(self.rank, 10)
    def __str__(self): # Generate the name of a card in a string
        return "%s of %s" % (Card.rank[int(self.rank)], Card.suit[self.suit])
if __name__ == "__main__": # Test the class Card above and will be skipped if it is imported into separate file to test
    try:
        c1 = Card(19,13)
    except TypeError:
        print ("The first parameter is not an integer")
    except TypeError:
           print ("The second parameter is not a string")
    except ValueError:
        print ("The value of first parameter is not in the range of 1 to 13")
    except ValueError:
        print ("The value of second parameter is not one of the strings in the set {'s','h','c','d'}")
    print(c1)
I know maybe it is due to that I have same TypeError and ValueError. Therefore, Python can't distinguish the second TypeError which I hit c1 = Card(13,13) is different from the first TypeError. So, I only get the message that "The first parameter is not an integer" when I have c1 = Card(13,13).
 
    