<p><code>namedtuple()</code>函数基本上是一个类工厂。您需要将该类导入其他模块才能使用它。
我建议您这样做,并在其他模块中导入<code>EMVTags</code>。你知道吗</p>
<pre><code>#this line is in the top of the file
import collections
EMVTags = collections.namedtuple('EMVTags', 'Tag TagName Value')
#...
def parse(self, tlv_string):
"""
"""
parsed_data = list()
self.tlv_string = tlv_string
i = 0
while i < len(self.tlv_string):
tag_found = False
for tag_length in self.tag_lengths:
for tag, tag_name in self.tags.items():
if self.tlv_string[i:i + tag_length].lower() == tag.lower():
try:
value_length = int(self.tlv_string[i + tag_length:i + tag_length + 2], 16)
except ValueError:
raise ValueError('Parse error: tag ' + tag + ' has incorrect data length')
value_start_position = i + tag_length + 2
value_end_position = i + tag_length + 2 + value_length * 2
if value_end_position > len(self.tlv_string):
raise ValueError('Parse error: tag ' + tag + ' declared data of length ' + str(
value_length) + ', but actual data length is ' + str(
int(len(self.tlv_string[value_start_position - 1:-1]) / 2)))
value = self.tlv_string[value_start_position:value_end_position]
parsed_data.append(EMVTags(Tag=tag, TagName=tag_name, Value=value))
i = value_end_position
tag_found = True
if not tag_found:
msg = 'Unknown tag found: ' + self.tlv_string[i:i + 10]
raise ValueError(msg)
return parsed_data
</code></pre>