<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <div class="moz-cite-prefix">Phil Thompson schrieb am 09.04.2013
      15:45:<br>
    </div>
    <blockquote cite="mid:ba90c0f991d477cea8d06668c987224d@localhost"
      type="cite">
      <pre wrap="">On Fri, 05 Apr 2013 16:20:58 +0200, Tobias Rzepka
<a class="moz-txt-link-rfc2396E" href="mailto:tobias.rzepka@gmail.com"><tobias.rzepka@gmail.com></a>
wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">Hello Phil,

I have encountered some odd behavior in the QSettings if I use the same 
ini with Python 2 and Python 3. I was able to track the problem down to 
a entry which is a complex list with dictionaries in it (in the example 
the ViewProfiles entry from Eric5).

There are two solutions I've found:
1. Delete the ViewProfiles entry
2. Access the ini without a default parameter of the QSettings.value
</pre>
      </blockquote>
      <pre wrap="">method
</pre>
      <blockquote type="cite">
        <pre wrap="">
Detlev and I would like to implement the second solution because users 
who use a old (<=5.3) and new version of Eric5 with different 
interpreter should see merely no differences in there settings.

The funny thing is, thats not only the default parameter of the value 
method but also the surrounding. I've to store the settings in a class 
(Prefs) and the second parameter has to be from another class, like in 
the example.

And if you uncomment the line SingleApplicationMode=false, everything is
</pre>
      </blockquote>
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">fine again (but also no solution, because the next access is going to
fail).

Can you tell, if it's a odd behavior of QSettings or maybe of Python?

I've attached a ini and a little code snippet from eric5, to demonstrate
</pre>
      </blockquote>
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">the behavior. The error message is the following:

Traceback (most recent call last):
    File "D:\Projekte\Eric5\qsettings\py2_qsettings.py", line 54, in
    <module>
      Prefs2.uiDefaults['SingleApplicationMode'])
    File "C:\Python27\lib\encodings\__init__.py", line 100, in
    search_function
      level=0)
    File "C:\Python27\lib\pickle.py", line 1382, in loads
      return Unpickler(file).load()
    File "C:\Python27\lib\pickle.py", line 858, in load
      dispatch[key](self)
    File "C:\Python27\lib\pickle.py", line 886, in load_proto
      raise ValueError, "unsupported pickle protocol: %d" % proto
ValueError: unsupported pickle protocol: 3


Thanks. Tobias

By the way: If I manage to read the ini and save it again, Python 2 
removes the quotation marks around the ViewProfiles values. Afterwards, 
the settings file isn't readable in Python 3...
</pre>
      </blockquote>
      <pre wrap="">
Have you made your example too simple? It works fine for me.

Phil

</pre>
    </blockquote>
    Hello Phil,<br>
    <br>
    I've tried it now on three different machines and different Python2
    / PyQt4 versions and all of them showed the exception.<br>
    I've tried<br>
    <br>
    1.<br>
    Win7, 64bit, Py2.7.3 64bit, PyQt4 4.9.4<br>
    Win7, 64bit, Py2.7.4 32bit, PyQt4 4.10<br>
    2.<br>
    Win7, 64bit, Py2.7.3 32bit, PyQt4 4.9.5<br>
    3.<br>
    Win7, 32bit, Py2.7.3 32bit, PyQt4 4.9.4<br>
    <br>
    No machine have a development environment for PyQt. All of them use
    the GPL version of your installer. <br>
    Maybe that's the difference?<br>
    <br>
    <b>Maybe it's the way you called my script:</b> if I run it from
    command line (only tested with Win7, 64bit, Py2.7.4 32bit, PyQt4
    4.10) like<br>
    c:\python27\python.exe py2_qsettings.py<br>
    it throws the exception, if I use execfile('py2_qsettings.py') it
    works flawless!<br>
    <br>
    Tobias<br>
  </body>
</html>