无法在OS X上使用python 2.6使web.py会话正常工作

时间:2012-03-21 00:37:23

标签: python web.py

我似乎无法让这个脚本工作:

import web
web.config.debug=False

urls = (
  '/', 'hello',
  '/bye/', 'bye')


app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'),
                              initializer={'count': 0})

class hello:
    def GET(self):
        session.count += 1
        return "You visited " + str(session.count) + " pages."

class bye:
    def GET(self):
        session.kill()
        return ("Bye, web!")

if __name__ == "__main__":
    app.run()

这是可从web.py文档页面获得的代码:http://webpy.org/cookbook/sessions

当我尝试通过转到http://localhost:1234/访问“hello”页面时,应用程序返回内部服务器错误。

以下是访问此资源时终端的输出:

http://0.0.0.0:1234/
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/web/application.py", line 237, in process
    return self.handle()
  File "/Library/Python/2.6/site-packages/web/application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "/Library/Python/2.6/site-packages/web/application.py", line 409, in _delegate
    return handle_class(cls)
  File "/Library/Python/2.6/site-packages/web/application.py", line 385, in handle_class
    return tocall(*args)
  File "testing.py", line 15, in GET
    session.count += 1
  File "/Library/Python/2.6/site-packages/web/session.py", line 69, in __getattr__
    return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'count'

127.0.0.1:49207 - - [20/Mar/2012 20:34:01] "HTTP/1.1 GET /" - 500 Internal Server Error

任何web.py专家都可以告诉我发生了什么吗?

5 个答案:

答案 0 :(得分:1)

更改     app = web.application(urls,globals())

要     app = web.application(urls,locals())

答案 1 :(得分:1)

我安装并配置了Macports版本的Python 2.7.2,但我仍然得到了类似的结果。

我刚刚想到这可能是权限问题,因为存储会话的位置。我尝试使用Python 2.7和Python 2.6运行'sudo',它们来自Apple,并且正在运行

sudo python myfile.py 1234

Web.py会话现在正在运行。 @Eduardo Ivanec:我将尝试使用您的说明设置我的Python开发环境。再次感谢你!

答案 2 :(得分:0)

您的代码与Python 2.7.2和web.py 0.36一样。如果您正在运行任何旧版本,我会升级,因为示例有效。

您的初始化程序似乎无法正常工作。您可以尝试使用此代码段来首次使用时初始化count属性:

class hello:
    def GET(self):
        try:
            session.count += 1
        except AttributeError:
            session.count = 1
        return "You visited " + str(session.count) + " pages."

编辑:由于您使用的是OS X,this link可能会有所帮助。它描述了如何使用标准OS X工具和virtualenv建立全新的Python环境。我使用GNU / Linux,但它看起来不错。此外,您可以在official download page下载准备好的版本。

答案 3 :(得分:0)

之前我遇到过这个问题。 对于500内部错误,请使用chmod -R 755 your_foler / sessions
更改文件夹的权限。

答案 4 :(得分:0)

问题是python版本。我有同样的问题,当我执行2.7版本的python时,我解决了它。 只做private void btnok1_Click(object sender, EventArgs e) { if (lblexcel1.Text=="") { MessageBox.Show("You have not Select Excel File. Please Select Respective Excel File"); } //Create connection string to Excel work book string excelConnectionString =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Details.xls;Extended Properties=""Excel 8.0;HDR=YES;"""; //Create Connection to Excel work book OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); //Create OleDbCommand to fetch data from Excel OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Location] from [Detail$]",excelConnection); excelConnection.Open(); OleDbDataReader dReader; dReader = cmd.ExecuteReader(); SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);sqlBulk.DestinationTableName = "Details"; //sqlBulk.ColumnMappings.Add("ID", "ID"); //sqlBulk.ColumnMappings.Add("Name", "Name"); sqlBulk.WriteToServer(dReader); } ,会话就完美无缺。