isinstance:如何更好地管理 set 类
isinstance: How to manage set classes better
在编写一些调试程序时 python,我似乎创建了一些我想清理的丑陋代码。
完整功能如下:
def debug(message, variable=None):
if variable and DEBUG:
print("\n" + str(type(variable)))
try:
if isinstance(variable, (list, dict, 'OrderedDict')):
variable = json.dumps(
variable,
indent=4,
sort_keys=True
)
except TypeError:
if isinstance(variable, (list, dict)):
variable = json.dumps(
variable,
indent=4,
sort_keys=True
)
if DEBUG:
if variable:
print(message + str(variable) + "\n")
else:
print("\n" + message)
我特别鄙视我的 try-except 声明,因为我不仅在重复代码,而且如果我 运行 进入另一个字典 class (比如请求中的 CaseInsensitiveDict headers) 我想在调试输出期间很好地打印我将不得不嵌套 try-except 语句。
有没有一种方法可以检查 type(variable)
是否像 *dict*
或 *list*
然后在创建用于 isinstance 的元组时添加它?
你要看@functools.singledispatch()
construct;这使您可以委托特定函数来处理调试,键入类型:
from functools import singledispatch
def debug(message, variable=None):
if not DEBUG:
return
variable = debug_display(variable)
print('{}{}\n'.format(message, variable))
@singledispatch
def debug_display(variable):
return str(variable)
@debug_display.register(type(None))
def _none_to_empty_string(_ignored):
return ''
@debug_display.register(dict)
@debug_display.register(list)
@debug_display.register(OrderedDict)
def _as_json(variable):
return json.dumps(
variable,
indent=4,
sort_keys=True
)
@debug_display.register(SomeOtherType)
def _handle_specific_type(variable):
# handle custom types any way you need to with separate registrations
return "{} -> {}".format(variable.spam, variable.ham)
singledispatch
知道如何为没有特定处理程序的子类进行委托;所以 OrderedDict
由 _as_json
处理程序处理,因为它是 dict
.
的子类
在编写一些调试程序时 python,我似乎创建了一些我想清理的丑陋代码。
完整功能如下:
def debug(message, variable=None):
if variable and DEBUG:
print("\n" + str(type(variable)))
try:
if isinstance(variable, (list, dict, 'OrderedDict')):
variable = json.dumps(
variable,
indent=4,
sort_keys=True
)
except TypeError:
if isinstance(variable, (list, dict)):
variable = json.dumps(
variable,
indent=4,
sort_keys=True
)
if DEBUG:
if variable:
print(message + str(variable) + "\n")
else:
print("\n" + message)
我特别鄙视我的 try-except 声明,因为我不仅在重复代码,而且如果我 运行 进入另一个字典 class (比如请求中的 CaseInsensitiveDict headers) 我想在调试输出期间很好地打印我将不得不嵌套 try-except 语句。
有没有一种方法可以检查 type(variable)
是否像 *dict*
或 *list*
然后在创建用于 isinstance 的元组时添加它?
你要看@functools.singledispatch()
construct;这使您可以委托特定函数来处理调试,键入类型:
from functools import singledispatch
def debug(message, variable=None):
if not DEBUG:
return
variable = debug_display(variable)
print('{}{}\n'.format(message, variable))
@singledispatch
def debug_display(variable):
return str(variable)
@debug_display.register(type(None))
def _none_to_empty_string(_ignored):
return ''
@debug_display.register(dict)
@debug_display.register(list)
@debug_display.register(OrderedDict)
def _as_json(variable):
return json.dumps(
variable,
indent=4,
sort_keys=True
)
@debug_display.register(SomeOtherType)
def _handle_specific_type(variable):
# handle custom types any way you need to with separate registrations
return "{} -> {}".format(variable.spam, variable.ham)
singledispatch
知道如何为没有特定处理程序的子类进行委托;所以 OrderedDict
由 _as_json
处理程序处理,因为它是 dict
.