The Pennsylvania special election should be a wakeup call for Republicans, but all House Speaker Paul Ryan has is some excuses.

On Tuesday night, Republican House candidate Rick Saccone failed to secure a win in a special election for a Pennsylvania district that went for Donald Trump by 20 points in 2016. The race stretched into Wednesday afternoon, when Democrat Conor Lamb, a 33-year-old former Marine, officially won the race in a stunning upset. Pennsylvania law does not mandate a recount in district-level elections.

Yet Ryan said he wasn’t surprised by the results. Lamb ran as a “conservative,” he said.

“The candidate who is going to win this race is the candidate who ran as a pro-life, pro-gun, anti-Nancy Pelosi, conservative,” Ryan said at his weekly press conference in the Capitol.

It’s one of a long list of justifications Republicans have rattled off to explain Saccone’s performance: from deriding Saccone’s electability to saying the Pennsylvania 18th was a Democratic district in the first place (it’s not), or that eventually voters would see the benefits of their economic policy.

Pennsylvania uncovered an uncomfortable reality for Republicans, who tried to push their tax cuts in this race, with outside groups spending more than $7 million largely on that message. Lamb, as moderate as he was, didn’t try to mirror Republicans on their agenda.

I tried to ask Ryan about this Wednesday morning: How can it be that tax cuts are a winning message and that Conor Lamb, who ran against the GOP tax law, is winning because he was a “conservative”?

Ryan, apparently growing tired at this line of questioning, cut me off and refused to answer.

The bottom line is that the Republican spin is a show of some of the GOP’s biggest vulnerabilities headed into the 2018 midterm election. Pennsylvania was an early test of GOP messaging and recruitment, and on both fronts, they were slammed with a wave of Democratic enthusiasm.

Republicans have a lot of excuses for Pennsylvania

It’s too early to make “sweeping predictions” about the 2018 midterm election, Washington Rep. Cathy McMorris Rodgers, who chairs the House Republican conference, warned reporters at the start of her weekly press conference Wednesday morning.

Republicans were ready to ward off any insinuation that the Pennsylvania special election was a bad omen for November.

GOP staffers said Saccone was a bad candidate, despite the 60-year-old state legislator and military veteran seemingly having a similar track record to that of many elected Republicans.

Strategists said he was an unorganized campaigner who failed to adequately fundraise.

“For any House GOP incumbents who have been coasting along and getting out-raised by their [Democratic] opponents, tonight should be a serious wake-up call no matter what happens,” Brian Walsh, a Republican strategist tweeted. “Campaigns matter.”

It’s true that Lamb’s campaign outspent Saccone’s and had a much more robust fundraising effort. But money wasn’t an issue for the Republican candidate, who saw more than $7 million spent in his name from a variety of outside groups.

House Majority Leader Kevin McCarthy noted that the district had more registered Democrats than Republicans. The district has historically trended Republican for many years. Democrats didn’t even challenge the Republican seat in 2014 and 2016.

McMorris Rodgers made sure to say the country hadn’t yet experienced the “full momentum of tax reform.” Once the voters truly see what the corporate tax cuts could do for them, the tide would change, she said.

As for Lamb, Ryan made his point very clear: He could have been the Republican.

The great contradiction in Republicans’ message

Republicans have hitched their cart to tax cuts.

The GOP tax bill loomed large over Saccone’s campaign. Republican groups spent millions trying to sell the policy to the district’s Republican voters. Trump came to the district early to tout the policy’s successes.

It didn’t stick. In the final weeks, pro-Saccone advertising began focusing largely on immigration, crime, and tying Lamb to Minority Leader Nancy Pelosi — whom Republicans have long used as the Democratic boogeywoman.

Now, as the party watches Saccone fall behind, Republicans have changed their tune on one front. Lamb is no longer a Pelosi liberal. He might as well have been a “conservative” Republican, Ryan said.

Put together, these Republican messages raise a major contradiction.

There’s no question that Lamb ran on a more moderate Democratic platform. He has shied away from criticizing Trump and said he would not support Pelosi for speaker. He came out against an assault weapons ban but supports stronger background check laws.

He is personally pro-life but supports the Supreme Court’s decision to legalize abortion. He does not support a ban on abortions at 20 weeks. In other words, on policy, Lamb is a pro-choice Democrat.

The clear divisions between Lamb and the Republicans land on the core pillars of the Republican agenda. Lamb is opposed to repealing Obamacare and called the GOP tax bill a “giveaway” to the wealthy.

“We didn’t need to add a penny to our debt to have the tax cut for our working- and middle-class people,” Lamb said at a debate, butting heads with Saccone.