99import enum
1010import fnmatch
1111import textwrap
12+ from collections .abc import Iterable
1213
1314from llnl .util .tty .colify import colified
1415
@@ -376,7 +377,7 @@ def print_single_attribute(obj, attr, verbose=False, pattern="*", format=support
376377 # Otherwise, we print the attribute's value directly.
377378 if isinstance (internal_attr , dict ):
378379 to_print = list (internal_attr .keys ())
379- elif hasattr (internal_attr , "default_variants" ):
380+ elif internal_attr is not None and hasattr (internal_attr , "default_variants" ):
380381 to_print = []
381382 for variant in internal_attr .default_variants .values ():
382383 to_print .append (variant )
@@ -387,7 +388,7 @@ def print_single_attribute(obj, attr, verbose=False, pattern="*", format=support
387388 to_print .append (variant )
388389 for variant in internal_attr .version_variants .values ():
389390 to_print .append (variant )
390- elif hasattr (internal_attr , "family_type" ):
391+ elif internal_attr is not None and hasattr (internal_attr , "family_type" ):
391392 to_print = [f"{ internal_attr .family_type } ={ family } " for family in internal_attr ]
392393 else :
393394 to_print = internal_attr
@@ -396,9 +397,7 @@ def print_single_attribute(obj, attr, verbose=False, pattern="*", format=support
396397 # if it's a list of dicts, convert the keys like above and print
397398 # otherwise filter it and print using the format specification
398399 # Otherwise, print it as a raw string.
399- if isinstance (to_print , (list , set , tuple )) or (
400- hasattr (to_print , "__iter__" ) and not isinstance (to_print , str )
401- ):
400+ if isinstance (to_print , Iterable ) and not isinstance (to_print , str ):
402401 to_print = list (to_print )
403402 if (
404403 internal_attr
@@ -415,9 +414,10 @@ def print_single_attribute(obj, attr, verbose=False, pattern="*", format=support
415414 if isinstance (internal_attr , dict ):
416415 _print_verbose_dict_attr (internal_attr , pattern = pattern , indentation = indentation )
417416 elif (
418- isinstance (internal_attr , (list , set , tuple ))
419- or (hasattr (internal_attr , "__iter__" ) and not isinstance (internal_attr , str ))
420- ) and not hasattr (internal_attr , "as_str" ):
417+ isinstance (internal_attr , Iterable )
418+ and not isinstance (internal_attr , str )
419+ and not hasattr (internal_attr , "as_str" )
420+ ):
421421 internal_list = list (internal_attr )
422422 # If it's a list of dicts, print each
423423 if internal_list and isinstance (internal_list [0 ], dict ):
@@ -440,7 +440,7 @@ def print_single_attribute(obj, attr, verbose=False, pattern="*", format=support
440440 color .cprint (f"{ colified (to_print , tty = True , indent = 4 )} " )
441441 color .cprint ("" )
442442 else :
443- if hasattr (internal_attr , "as_str" ):
443+ if internal_attr is not None and hasattr (internal_attr , "as_str" ):
444444 color .cprint (internal_attr .as_str (verbose = True ))
445445 else :
446446 color .cprint (f"{ indentation } { internal_attr } \n " )
0 commit comments