Stumped on object not set to an instance of an object, even though it is!?

Thanks for checking out my question. Basically I have a ship shop in which the player can pick different ships to play as. When they select a ship, it saves that ship using ints through playerprefs. But when I play the game after switching ships, it shoots out errors saying that the player script I want to activate is not set to an instance of an object. My code will be below, but what I did was set three ships to the gametag Player, and the others to Player2, because they have different player scripts. When ship 1 through 3 are selected, it says it cannot find playerController2, and vice versa for ships 4 through 6.

public void Play () {
		spawner.SetActive (true);
		GameObject.Find ("Points").GetComponent<scoreManager> ().enabled = true;
		GameObject.Find ("Points").GetComponent<scorePoint> ().enabled = true;
		GameObject.Find ("TapToPlay").SetActive (false);
		GameObject.Find ("shipShop").SetActive (false);

		if (shipShop.shipSelected == 1 || shipShop.shipSelected == 2 || shipShop.shipSelected == 3) {
			GameObject.FindGameObjectWithTag ("Player").GetComponent<playerController> ().enabled = true;
		} else {
		if (shipShop.shipSelected == 4 || shipShop.shipSelected == 5 || shipShop.shipSelected == 6) {
			GameObject.FindGameObjectWithTag ("Player2").GetComponent<playerController2> ().enabled = true;
		} else {

Your logic is flawed. The entire second test ( if (shipShop.shipSelected == 4 || shipShop.shipSelected == 5 || shipShop.shipSelected == 6)) will never run. Because on line 11, the return statement exits the function if the shipSelected is anything other than 1,2, or 3.

Get rid of the two else { return; } blocks.