Python iInstance:如何更好地管理集合类
在编写一些python调试代码时,我似乎已经创建了一些难看的代码,我想对其进行清理 以下是整个功能:Python iInstance:如何更好地管理集合类,python,isinstance,Python,Isinstance,在编写一些python调试代码时,我似乎已经创建了一些难看的代码,我想对其进行清理 以下是整个功能: def debug(message, variable=None): if variable and DEBUG: print("\n" + str(type(variable))) try: if isinstance(variable, (list, dict, 'OrderedDict')):
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语句,因为我不仅在重复代码,而且如果我遇到另一个字典类(比如来自请求头的CaseInsensitiveDict),我想在调试输出期间很好地打印它,我就必须嵌套try-except语句
是否有一种方法可以检查类型(变量)
是否与*dict*
或*list*
类似,然后在创建用于iInstance的元组时添加它?您想查看;这使您可以委托特定函数来处理调试,键入类型:
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
由\u作为_json
处理程序处理,因为它是dict
的子类,您要查看;这使您可以委托特定函数来处理调试,键入类型:
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
知道如何委托没有特定处理程序的子类;因此,orderedict
由\u as_json
处理程序处理,因为它是dict
的子类,'orderedict'
不是一个有效的类型,那是一个字符串。代码引发异常的唯一原因是因为在isinstance()调用中使用了字符串作为类型。没有理由在这里嵌套任何类型错误。似乎您可以使用日志记录
模块来处理大部分此类逻辑。也不清楚为什么您会检查一个实例,但仍然期望出现TypeError
。感谢您的帮助。当使用xmltodict
时,它是一个set类,当解析使用xmltodict.parse(xml\u字符串)
设置的变量时,此代码的行为与预期的一样。据我所知,元组必须是类型或类。我必须检查我以前没有使用过的日志记录模块。'orderedict'
不是有效的类型,这是一个字符串。代码引发异常的唯一原因是因为在isinstance()调用中使用了字符串作为类型。没有理由在这里嵌套任何类型错误。似乎您可以使用日志记录
模块来处理大部分此类逻辑。也不清楚为什么您会检查一个实例,但仍然期望出现TypeError
。感谢您的帮助。当使用xmltodict
时,它是一个set类,当解析使用xmltodict.parse(xml\u字符串)
设置的变量时,此代码的行为与预期的一样。据我所知,元组必须是类型或类。我必须检查日志记录
模块,我以前从未使用过它。太棒了!谢谢你的时间,太棒了!谢谢你抽出时间。