この件に関してはこの書籍の「1.7 例外」の中に記載されている以下の文に大いに助けられました。意外と python の例外の処理方針について言及している書籍は少ない気がします。
Javaとは違い、Pythonの関数は、自身がどのような例外を送出するのかを宣言しない。発生しうる例外のうち捕捉すべきものを見定めるのはあなたの責任だ。
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
class Dump:
def __init__(self,fname):
try:
self.infile = open(fname, 'r')
except Exception as e:
print u"ファイルオープン失敗"
raise e
self.data = self.infile.read()
self.infile.close()
self.offset = 0
def adrdump(self):
print "%08x" % self.offset,
def hexdump(self,p):
output = [];
for i in range(len(p)):
output.append(" %02x" % ord(p[i]))
if i == 7:
output.append(" -")
print ":%-50s" % ''.join(output),
def chrdump(self,p):
output = [];
for i in range(len(p)):
if ( (0x00<=ord(p[i]) and ord(p[i])<=0x1f) or 0x7f<=ord(p[i])) :
output.append(".")
else :
output.append(p[i])
print ": %-16s" % ''.join(output),
def next(self):
self.now = self.offset
self.offset = self.offset + 16
return(self.data[self.now : self.now+16])
def isnext(self):
self.ret = False
if len(self.data) > self.offset:
self.ret = True
return(self.ret)
def display(self):
while(disp.isnext()):
buf = self.next()
self.adrdump()
self.hexdump(buf)
self.chrdump(buf)
print
if __name__ == "__main__":
try:
disp = Dump(sys.argv[1])
disp.display()
except Exception as e:
print u"異常終了:",sys.exc_info()[0]
print u"type" + str(type(e))
print u"args" + str(e.args)
print u"message" + e.message
print u"e自信" + str(e)
0 件のコメント:
コメントを投稿