1+ from contextlib import suppress
12from uuid import UUID
23import datetime
34import ipaddress
@@ -220,11 +221,9 @@ def is_ipv6(instance):
220221 return not getattr (address , "scope_id" , "" )
221222
222223
223- try :
224+ with suppress ( ImportError ) :
224225 from fqdn import FQDN
225- except ImportError : # pragma: no cover
226- pass
227- else :
226+
228227 @_checks_drafts (
229228 draft3 = "host-name" ,
230229 draft4 = "hostname" ,
@@ -239,12 +238,10 @@ def is_host_name(instance):
239238 return FQDN (instance ).is_valid
240239
241240
242- try :
241+ with suppress ( ImportError ) :
243242 # The built-in `idna` codec only implements RFC 3890, so we go elsewhere.
244243 import idna
245- except ImportError : # pragma: no cover
246- pass
247- else :
244+
248245 @_checks_drafts (
249246 draft7 = "idn-hostname" ,
250247 draft201909 = "idn-hostname" ,
@@ -261,11 +258,9 @@ def is_idn_host_name(instance):
261258try :
262259 import rfc3987
263260except ImportError :
264- try :
261+ with suppress ( ImportError ) :
265262 from rfc3986_validator import validate_rfc3986
266- except ImportError : # pragma: no cover
267- pass
268- else :
263+
269264 @_checks_drafts (name = "uri" )
270265 def is_uri (instance ):
271266 if not isinstance (instance , str ):
@@ -325,11 +320,9 @@ def is_uri_reference(instance):
325320 return True
326321 return rfc3987 .parse (instance , rule = "URI_reference" )
327322
328- try :
323+ with suppress ( ImportError ) :
329324 from rfc3339_validator import validate_rfc3339
330- except ImportError :
331- pass
332- else :
325+
333326 @_checks_drafts (name = "date-time" )
334327 def is_datetime (instance ):
335328 if not isinstance (instance , str ):
@@ -374,16 +367,10 @@ def is_draft3_time(instance):
374367 return datetime .datetime .strptime (instance , "%H:%M:%S" )
375368
376369
377- try : # webcolors>=1.11
370+ with suppress ( ImportError ):
378371 from webcolors import CSS21_NAMES_TO_HEX
379372 import webcolors
380- except ImportError :
381- try : # webcolors<1.11
382- from webcolors import css21_names_to_hex as CSS21_NAMES_TO_HEX
383- import webcolors
384- except ImportError : # pragma: no cover
385- pass
386- else :
373+
387374 def is_css_color_code (instance ):
388375 return webcolors .normalize_hex (instance )
389376
@@ -402,11 +389,9 @@ def is_css3_color(instance):
402389 return is_css_color_code (instance )
403390
404391
405- try :
392+ with suppress ( ImportError ) :
406393 import jsonpointer
407- except ImportError : # pragma: no cover
408- pass
409- else :
394+
410395 @_checks_drafts (
411396 draft6 = "json-pointer" ,
412397 draft7 = "json-pointer" ,
@@ -452,11 +437,9 @@ def is_relative_json_pointer(instance):
452437 return (rest == "#" ) or jsonpointer .JsonPointer (rest )
453438
454439
455- try :
440+ with suppress ( ImportError ) :
456441 import uri_template
457- except ImportError : # pragma: no cover
458- pass
459- else :
442+
460443 @_checks_drafts (
461444 draft6 = "uri-template" ,
462445 draft7 = "uri-template" ,
@@ -469,11 +452,9 @@ def is_uri_template(instance):
469452 return uri_template .validate (instance )
470453
471454
472- try :
455+ with suppress ( ImportError ) :
473456 import isoduration
474- except ImportError : # pragma: no cover
475- pass
476- else :
457+
477458 @_checks_drafts (
478459 draft201909 = "duration" ,
479460 draft202012 = "duration" ,
0 commit comments