pycharm终端并运行给出不同的结果

时间:2016-12-14 15:43:16

标签: python python-3.x pycharm

使用Pycharm编写用于加载和格式化固定宽度文件的python脚本当我在终端(在Pycharm内或本地)运行脚本以及在Pycharm中使用run选项时,我得到的结果不同。是什么原因,这是正确的?

with open('uk_dcl_mrg.txt', 'rb') as f:
ct = 0
for line in f:
    ct += 1

    #### OUTOUT ####
    for i in layout:  ## Loop to create dictionary
        headerdict[i[0]] = line[i[1]:i[2]]


    if (headerdict['CORP-STATUS-IND'] == "\x9f"):
        headerdict['CORP-STATUS-IND'] = '0'

    elif headerdict['CORP-STATUS-IND'] == '?':
        headerdict['CORP-STATUS-IND'] = '1'

    else:
        headerdict['CORP-STATUS-IND'] = '2'


    print(headerdict)

    if ct >= 6:
        break

终端输出

'CORP-STATUS-IND': '0',

在Pycharm的运行选项中输出

'CORP-STATUS-IND': '2',

终端输出是我所期待的。

2 个答案:

答案 0 :(得分:1)

当我不确定时,我通常不会回答,但在这里我很确定:

您可能正在运行2种不同的解释器版本。控制台中的Python 2和PyCharm中的Python 3。

通过在脚本中插入以下行来确认:

print(sys.version)

问题在于这一行:

with open('uk_dcl_mrg.txt', 'rb') as f:

因为你在二进制文件中打开文件,所以在Python 3中,行是二进制的,而不是字符串,所以将它们与字符串进行比较总是失败。

>>> b'\x9f'=='\x9f'
False
>>> b'\x9f'[0]
159
>>> '\x9f'[0]
'\x9f'

在Python 2中,无论文件打开模式如何,这些行都是str类型,这说明它有效。

修复你的代码:

with open('uk_dcl_mrg.txt', 'r') as f:

它适用于所有版本的python。但我建议你删除Python 2,除非你绑定它并默认安装Python 3。

答案 1 :(得分:-1)

老实说,我只是坚持终端。 IDE的问题在于有时不直接解释代码,和/或通过官方的“python解释器”。此外,有许多设置和其他参数可以与您的代码一起运行,理论上可以编辑结果。此外,您的翻译仍然可以通过旧版本的python进行解释。现在,老实说,大多数情况不太可能,但这是我看到的唯一可信的原因。就个人而言,我建议在终端中使用像nano这样的东西进行编码(这就是我的工作),然后直接从终端运行代码。但是,如果您仍然喜欢IDE,那么可能只是使用IDE进行语法高亮显示,但仍然可以从终端运行代码?