我有一个Python脚本,该脚本接受file.txt作为参数。
当我从Windows命令行运行时,它抱怨以下错误。
*C:\Projects\ATR220TA\ISO8583_Payment>python C:\Projects\ATR220TA\ISO8583_Payment\ISO8583.py C:\Projects\ISO8583.txt
Traceback (most recent call last):
File "C:\Projects\ATR220TA\ISO8583_Payment\ISO8583.py", line 19, in <module>
from ISO8583_Payment.ISOErrors import InvalidIso8583, ValueToLarge, InvalidValueType, InvalidBitType, BitInexistent, \
ModuleNotFoundError: No module named 'ISO8583_Payment'
C:\Projects\ATR220TA\ISO8583_Payment>pause*
基本上,ISO8583_Payment
是我的主项目的子文件夹,但是由于某种原因,ISO8583_Payment
被认为是一个模块,并引发“找不到模块”错误。
ISO8583.py
def ParseRawMessage(ISO8583TextFile):
with open(ISO8583TextFile, 'rb') as in_file:
contents = in_file.read()
hex_bytes = binascii.hexlify(contents)
IsoStr = hex_bytes.decode("ascii")
Iso8583 = ISO8583()
try:
Iso8583.setIsoContent(IsoStr)
except InvalidMTI as error:
print("{0}".format(error))
except InvalidBitType as error:
print("{0}".format(error))
except ValueToLarge as error:
print("{0}".format(error))
except InvalidValueType as error:
print("{0}".format(error))
except BitInexistent as error:
print("{0}".format(error))
except BitNotSet as error:
print("{0}".format(error))
except InvalidIso8583 as error:
print("{0}".format(error))
bitsAndValuesDictionary = Iso8583.getBitsAndValues()
for v in bitsAndValuesDictionary:
print('%s (BIT-%s) = %s' % (v['name'], v['bit'], v['value']))
if __name__ == '__main__':
ParseRawMessage(sys.argv[1])
答案 0 :(得分:0)
撰写时
from ISO8583_Payment.ISOErrors import InvalidIso8583, ValueToLarge, \
InvalidValueType, InvalidBitType, BitInexistent
您正在告诉Python ISO8583_Payment
是一个模块。
因此,您可以将一个空的__init__.py
文件添加到该子目录,或者,如果您希望将其保留为目录,请使用以下代码将其添加到系统路径,以便对其进行搜索:
import sys
sys.path.append("/ISO8583_Payment")
答案 1 :(得分:-1)
@Mikah Barnett,当我从命令提示符运行时,您的建议不起作用。之前我曾经提到过,它对我有用,但是,我只是意识到它仅在我从pyCharm IDE运行时才有效(对不起混乱)。 ISO8583.py
和ISO8583Errors.py
都位于ISO8583_payment
文件夹内。另外,我根据您的建议在__init.py__
文件夹中创建了ISO8583_Payment
。
ISO8583.py
import sys
sys.path.append("/ISO8583_Payment")
from ISO8583_Payment.ISOErrors import InvalidBitType,InvalidMTI,InvalidValueType,InvalidIso8583,ValueToLarge,BitInexistent,BitNotSet
''' I did not copy all the source code in here ''''
def ParseRawMessage(ISO8583TextFile):
with open(ISO8583TextFile, 'rb') as in_file:
contents = in_file.read()
hex_bytes = binascii.hexlify(contents)
IsoStr = hex_bytes.decode("ascii")
Iso8583 = ISO8583()
try:
Iso8583.setIsoContent(IsoStr)
except InvalidMTI as error:
print("{0}".format(error))
except InvalidBitType as error:
print("{0}".format(error))
except ValueToLarge as error:
print("{0}".format(error))
except InvalidValueType as error:
print("{0}".format(error))
except BitInexistent as error:
print("{0}".format(error))
except BitNotSet as error:
print("{0}".format(error))
except InvalidIso8583 as error:
print("{0}".format(error))
bitsAndValuesDictionary = Iso8583.getBitsAndValues()
for v in bitsAndValuesDictionary:
print('%s (BIT-%s) = %s' % (v['name'], v['bit'], v['value']))
if __name__ == '__main__':
ParseRawMessage(sys.argv[1])
ISOErrors.py
class ValueToLarge(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
class BitInexistent(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
class InvalidValueType(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
class InvalidBitType(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
class InvalidIso8583(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
class InvalidMTI(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(self.str)
#Exception that indicate that bit is not there.
class BitNotSet(Exception):
def __init__(self, value):
self.str = value
def __str__(self):
return repr(
当我从命令提示符运行时,仍然出现以下错误。
C:\Projects\ATR220TA_Work_On_Progress\ISO8583_Payment>python C:\Projects\ATR220TA_Work_On_Progress\ISO8583_Payment
C:\Users\gobiraaj.anandavel\AppData\Local\Programs\Python\Python37-32\python.exe: can't find '__main__' module in 'C:\\Projects\\ATR220TA_Work_On_Progress\\ISO8583_Payment'