Canopy中的Python错误,但IDLE中没有

时间:2014-01-15 21:42:25

标签: python enthought canopy

我有这个简单的脚本,它将文本文件附加到Python中的电子邮件中。当我在IDLE中运行此脚本时,它工作正常。然而,当我在Canopy Express中运行它时,我收到此错误:( text.txt文件与python脚本位于同一目录中)

---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
C:\Program Files (x86)\Enthought\Canopy32\App\appdata\canopy-1.2.0.1610.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    195             else:
    196                 filename = fname
--> 197             exec compile(scripttext, filename, 'exec') in glob, loc
    198     else:
    199         def execfile(fname, *where):

C:\Users\499293\Desktop\Project Folder\attachex.py in <module>()
      7 
      8 # Read a file and encode it into base64 format
----> 9 fo = open(filename, "rb")
     10 filecontent = fo.read()
     11 encodedcontent = base64.b64encode(filecontent)  # base64

IOError: [Errno 2] No such file or directory: 'text.txt' 

这是我正在使用的代码:

#!/usr/bin/python

import smtplib
import base64

filename = "text.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = 'me@work.com'
reciever = 'them@work.com'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('mailhost.work.com', 25)
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

我真的不明白错误意味着什么,或者为什么我使用Canopy而不是IDLE。 (我刚刚下载了Canopy以利用内置的matplotlib和numpy)

2 个答案:

答案 0 :(得分:3)

文件位于同一目录中这一事实无关紧要 - 它必须位于当前工作目录中 - 启动脚本时您所在的目录。否则,您需要将文件的路径作为参数传递,或者从脚本的位置计算路径(可以从__file__魔术变量获取)。

答案 1 :(得分:0)

布鲁诺说。

此外:

Canopy的Python窗格右上方是一个下拉菜单。您可以使用它来设置当前工作目录以匹配Python文件的目录(或者,实际上始终同步到打开的python文件的目录)。对于您的代码所做的假设,这将是一个简单的解决方法。

此功能对初学者非常有用,但通常不是经验丰富的开发人员想要的。