您如何检查 Python csv.writer 实例的 class?
How do you check the class of a Python csv.writer instance?
我有一个函数可以将 python 列表写入各种格式。 csv
是我想写成的格式之一。我知道我使用内置的 csv
Python 模块,但我的函数目前是按以下方式编写的:
def foo(self, save_to=None):
if save_to is None:
print self.my_list
我可以通过以下方式检查 csv.writer 对象的类型:
writer = csv.writer(open('test.csv','w'))
writer
<_csv.writer at 0x7f278125aca8>
type(writer)
_csv.writer
如果 save_to
是一个 csv
对象,我如何检查我的函数?通常我会在这样的函数中使用 isinstance
:
def foo(self, save_to=None):
if save_to is None:
print self.my_list
if isinstance(save_to, _csv.writer):
save_to.writerow([self.my_list])
但我得到了 NameError
和 AttrubuteError
In [28]: isinstance(writer, _csv.writer)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-28-0af1f54bd092> in <module>()
----> 1 isinstance(writer, _csv.writer)
NameError: name '_csv' is not defined
In [29]: isinstance(writer, csv._csv.writer)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-4e8e62254caf> in <module>()
----> 1 isinstance(writer, csv._csv.writer)
AttributeError: 'module' object has no attribute '_csv
你不应该在这里使用 isinstance
检查(尤其不要在像 _csv
这样的私有模块中使用 class):isinstance
调用违反了 OOP一般的。更具体到 Python,它的 "duck-typing" 意味着你应该尝试使用方法并捕获属性错误:如果它像鸭子一样嘎嘎叫,它就是一只鸭子——如果它实现了 writerow
like a csv writer,就是csv writer
try:
save_to.writerow([self.my_list])
except AttributeError:
# not a csv writer, do something else
更具体地说,您收到您详细说明的错误的原因是子模块未导入。
我有一个函数可以将 python 列表写入各种格式。 csv
是我想写成的格式之一。我知道我使用内置的 csv
Python 模块,但我的函数目前是按以下方式编写的:
def foo(self, save_to=None):
if save_to is None:
print self.my_list
我可以通过以下方式检查 csv.writer 对象的类型:
writer = csv.writer(open('test.csv','w'))
writer
<_csv.writer at 0x7f278125aca8>
type(writer)
_csv.writer
如果 save_to
是一个 csv
对象,我如何检查我的函数?通常我会在这样的函数中使用 isinstance
:
def foo(self, save_to=None):
if save_to is None:
print self.my_list
if isinstance(save_to, _csv.writer):
save_to.writerow([self.my_list])
但我得到了 NameError
和 AttrubuteError
In [28]: isinstance(writer, _csv.writer)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-28-0af1f54bd092> in <module>()
----> 1 isinstance(writer, _csv.writer)
NameError: name '_csv' is not defined
In [29]: isinstance(writer, csv._csv.writer)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-4e8e62254caf> in <module>()
----> 1 isinstance(writer, csv._csv.writer)
AttributeError: 'module' object has no attribute '_csv
你不应该在这里使用 isinstance
检查(尤其不要在像 _csv
这样的私有模块中使用 class):isinstance
调用违反了 OOP一般的。更具体到 Python,它的 "duck-typing" 意味着你应该尝试使用方法并捕获属性错误:如果它像鸭子一样嘎嘎叫,它就是一只鸭子——如果它实现了 writerow
like a csv writer,就是csv writer
try:
save_to.writerow([self.my_list])
except AttributeError:
# not a csv writer, do something else
更具体地说,您收到您详细说明的错误的原因是子模块未导入。