diff --git a/python/phonenumbers/phonenumberutil.py b/python/phonenumbers/phonenumberutil.py
index 8ff04afd..0948934d 100644
--- a/python/phonenumbers/phonenumberutil.py
+++ b/python/phonenumbers/phonenumberutil.py
@@ -3223,6 +3223,9 @@ class NumberParseException(UnicodeMixin, Exception):
         self.error_type = error_type
         self._msg = msg
 
+    def __reduce__(self):
+        return (type(self), (self.error_type, self._msg))
+
     def __unicode__(self):
         return unicod("(%s) %s") % (self.error_type, self._msg)
 

diff --git a/python/tests/phonenumberutiltest.py b/python/tests/phonenumberutiltest.py
index 592fec80..c9d2cedf 100755
--- a/python/tests/phonenumberutiltest.py
+++ b/python/tests/phonenumberutiltest.py
@@ -17,6 +17,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import sys
+import pickle
 
 import phonenumbers
 from phonenumbers import PhoneNumber, PhoneMetadata
@@ -26,6 +27,7 @@ from phonenumbers import ValidationResult, NumberFormat, CountryCodeSource
 from phonenumbers import region_code_for_country_code
 # Access internal functions of phonenumberutil.py
 from phonenumbers import phonenumberutil, shortnumberinfo
+from phonenumbers.phonenumberutil import NumberParseException
 from phonenumbers.util import u, to_long
 from .testmetadatatest import TestMetadataTestCase
 
@@ -3165,6 +3167,12 @@ class PhoneNumberUtilTest(TestMetadataTestCase):
                              'register': True})
         self.assertTrue(phonenumbers.example_number_for_type('XY', PhoneNumberType.PERSONAL_NUMBER) is None)
 
+    def testPickledException(self):
+        err = NumberParseException(NumberParseException.TOO_SHORT_AFTER_IDD, 'hello world')
+        pickled = pickle.dumps(err)
+        recovered = pickle.loads(pickled)
+        self.assertEqual("%r" % err, "%r" % recovered)
+
     def testCoverage(self):
         # Python version extra tests
         self.assertTrue(phonenumberutil._region_code_for_number_from_list(GB_NUMBER, ("XX",)) is None)

NumberParseException is not picklable
Hi,

I noticed that `NumberParseException` is not picklable. It deviates from the `__init__` signature of `Exception`, which itself implements `__reduce__` s.t. only the `msg` argument is pickled. This program:

```python
import pickle
from phonenumbers.phonenumberutil import NumberParseException

error = NumberParseException(NumberParseException.TOO_SHORT_AFTER_IDD, 'hello world')
s = pickle.dumps(error)
again = pickle.loads(s)
```

produces the output:

```
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'msg'
```

Adding a `__reduce__` method to `NumberParseException` seems  to fix it:

```python
    def __reduce__(self):
        return (type(self), (self.error_type, self._msg))
```
python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testPickledException
python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testCanBeInternationallyDialled python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testConvertAlphaCharactersInNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testCountryWithNoNumberDesc python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testCoverage python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testExtractPossibleNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFailedParseOnInvalidNumbers python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatARNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatAUNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatBSNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatByPattern python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatDENumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatE164Number python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatGBNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatITNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatInOriginalFormat python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatMXNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatNumberForMobileDialing python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatNumberWithExtension python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatOutOfCountryCallingNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatOutOfCountryKeepingAlphaChars python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatOutOfCountryWithInvalidRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatOutOfCountryWithPreferredIntlPrefix python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatUSNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatWithCarrierCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFormatWithPreferredCarrierCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testFrozenPhoneNumberImmutable python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetCountryCodeForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetCountryMobileToken python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetExampleNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetExampleNumberForNonGeoEntity python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetExampleNumberWithoutRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetInstanceLoadARMetadata python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetInstanceLoadDEMetadata python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetInstanceLoadInternationalTollFreeMetadata python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetInstanceLoadUSMetadata python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetInvalidExampleNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetLengthOfGeographicalAreaCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetLengthOfNationalDestinationCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetNationalDiallingPrefixForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetNationalSignificantNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetNationalSignificantNumber_ManyLeadingZeros python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetRegionCodeForCountryCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetRegionCodeForNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetRegionCodesForCountryCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetSupportedCallingCodes python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetSupportedGlobalNetworkCallingCodes python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetSupportedTypesForNonGeoEntity python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testGetSupportedTypesForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsAlphaNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsFixedLine python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsFixedLineAndMobile python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsMobile python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsMobileNumberPortableRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNANPACountry python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNotPossibleNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNotValidNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberGeographical python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchAcceptsProtoDefaultsAsMatch python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchIgnoresSomeFields python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchMatches python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchMatchesDiffLeadingZerosIfItalianLeadingZeroFalse python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchNonMatches python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchNsnMatches python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchShortMatchIfDiffNumLeadingZeros python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsNumberMatchShortNsnMatches python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPersonalNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForTypeWithReason_DataMissingForSizeReasons python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForTypeWithReason_DifferentTypeLengths python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForTypeWithReason_FixedLineOrMobile python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForTypeWithReason_LocalOnly python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForTypeWithReason_NumberTypeNotSupportedForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForType_DataMissingForSizeReasons python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForType_DifferentTypeLengths python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForType_LocalOnly python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberForType_NumberTypeNotSupportedForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPossibleNumberWithReason python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsPremiumRate python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsSharedCost python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsTollFree python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsUnknown python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsValidForRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsValidNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsViablePhoneNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsViablePhoneNumberNonAscii python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testIsVoip python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMaybeExtractCountryCode python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMaybeStripInternationalPrefix python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMaybeStripNationalPrefix python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMetadataAsString python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMetadataEquality python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMetadataEval python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testMetadataImmutable python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testNormaliseOtherDigits python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testNormaliseRemovePunctuation python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testNormaliseReplaceAlphaCharacters python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testNormaliseStripAlphaCharacters python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testNormaliseStripNonDiallableCharacters python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseAndKeepRaw python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseExtensions python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseHandlesLongExtensionsWithAutoDiallingLabels python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseHandlesLongExtensionsWithExplicitLabels python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseHandlesShortExtensionsWhenNotSureOfLabel python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseHandlesShortExtensionsWithAmbiguousChar python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseItalianLeadingZeros python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseMaliciousInput python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNationalNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNationalNumberArgentina python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNonAscii python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNumberTooShortIfNationalPrefixStripped python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNumberWithAlphaCharacters python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNumbersMexico python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseNumbersWithPlusWithNoRegion python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseWithInternationalPrefixes python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseWithLeadingZero python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testParseWithXInNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testSupportedRegions python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testTruncateTooLongNumber python/tests/phonenumberutiltest.py::PhoneNumberUtilTest::testUnknownCountryCallingCode