python 打印到 std out 时的输出与存储在 dict 中的输出不同
python output different when printed to std out than stored in dict
我正在尝试使用 dnspython
进行区域传输,然后将 A 记录存储到字典中,以便稍后从中弹出值。见下文:
import dns.zone
import dns.query
from dns.exception import DNSException
from dns.rdataclass import *
from dns.rdatatype import *
domain = "mydomain.com"
ns = '1.2.3.4'
try:
zone = dns.zone.from_xfr(dns.query.xfr(ns, domain))
print "Zone origin:", zone.origin
except DNSException, e:
print e.__class__, e
for (name, ttl, rdata) in zone.iterate_rdatas('A'):
record = { name : rdata }
print name, rdata
print record
为什么我使用 print
时的输出与我在字典中存储相同变量 name, rdata
并打印该字典时的输出不同?请参阅下面的输出:
www 1.1.1.1
{<DNS name www>: <DNS IN A rdata: 1.1.1.1>}
我想澄清一下我的问题:如何使字典看起来像:
{ 'www' : '1.1.1.1' }
在字典中添加一个值
d['key'] = 'value'
发生这种情况是因为字典的内容是通过在其每个 keys/values 上调用 repr
来表示的,而直接打印对象将调用 str
。
示例:
>>> class Fred:
... def __repr__(self):
... return "value returned by repr"
... def __str__(self):
... return "value returned by str"
...
>>> d = {1: Fred()}
>>> print d
{1: value returned by repr}
>>> print d[1]
value returned by str
对此您无能为力...您可以编写自己的 类 版本并尝试打印并定义 __repr__
因此它的行为与 __str__
。或者您可以编写一个自定义的字典打印函数来呈现 __str__
而不是 __repr__
的结果。但是没有内置的方法强制 print somedict
使用 __str__
而不是 __repr__
.
>>> print "{" + ", ".join("{} : {}".format(repr(str(key)), repr(str(value))) for key, value in d.iteritems()) + "}"
{'1' : 'value returned by str'}
我知道这是一个老问题,但是因为我遇到了同样的问题所以来到这里。阅读凯文的答案后,我只是尝试将答案名称替换为“rdata”与“str(rdata)” .这只为我返回了 IP 地址,而不是整个字符串,包括“DNS IN A rdata:”
希望对您有所帮助
我正在尝试使用 dnspython
进行区域传输,然后将 A 记录存储到字典中,以便稍后从中弹出值。见下文:
import dns.zone
import dns.query
from dns.exception import DNSException
from dns.rdataclass import *
from dns.rdatatype import *
domain = "mydomain.com"
ns = '1.2.3.4'
try:
zone = dns.zone.from_xfr(dns.query.xfr(ns, domain))
print "Zone origin:", zone.origin
except DNSException, e:
print e.__class__, e
for (name, ttl, rdata) in zone.iterate_rdatas('A'):
record = { name : rdata }
print name, rdata
print record
为什么我使用 print
时的输出与我在字典中存储相同变量 name, rdata
并打印该字典时的输出不同?请参阅下面的输出:
www 1.1.1.1
{<DNS name www>: <DNS IN A rdata: 1.1.1.1>}
我想澄清一下我的问题:如何使字典看起来像:
{ 'www' : '1.1.1.1' }
在字典中添加一个值
d['key'] = 'value'
发生这种情况是因为字典的内容是通过在其每个 keys/values 上调用 repr
来表示的,而直接打印对象将调用 str
。
示例:
>>> class Fred:
... def __repr__(self):
... return "value returned by repr"
... def __str__(self):
... return "value returned by str"
...
>>> d = {1: Fred()}
>>> print d
{1: value returned by repr}
>>> print d[1]
value returned by str
对此您无能为力...您可以编写自己的 类 版本并尝试打印并定义 __repr__
因此它的行为与 __str__
。或者您可以编写一个自定义的字典打印函数来呈现 __str__
而不是 __repr__
的结果。但是没有内置的方法强制 print somedict
使用 __str__
而不是 __repr__
.
>>> print "{" + ", ".join("{} : {}".format(repr(str(key)), repr(str(value))) for key, value in d.iteritems()) + "}"
{'1' : 'value returned by str'}
我知道这是一个老问题,但是因为我遇到了同样的问题所以来到这里。阅读凯文的答案后,我只是尝试将答案名称替换为“rdata”与“str(rdata)” .这只为我返回了 IP 地址,而不是整个字符串,包括“DNS IN A rdata:”
希望对您有所帮助