EuroPython 2020: Opening our Merchandise Shop

2020-06-23 Thread M.-A. Lemburg
We’re very happy to announce our very own EuroPython merchandise shop:


  * EuroPython Merch Shop *

   https://shop.spreadshirt.ie/europython/



Customize your conference t-shirt for EP2020


The shop is run on the Spreadshirt platform and so Spreadshirt will
handle all payments, invoicing and shipping.

Since we’re running EuroPython 2020 as an online event, we will not be
giving out conference bags or t-shirts this year, as we do for the
in-person event. Instead, we give you the opportunity to choose among
the many products we have put up in the shop, and order the color and
size completely individually.

Any profit this creates will go towards the EuroPython 2021 financial
aid budget, so will be put to good use.

Save 15% until July 5
-

Spreadshirt is giving a 15% discount on the prices until July 5, 23:59
UTC, so if you’re ordering in the next few days, you can still get
your shirt in time for the conference.

Shipping worldwide
--

Spreadshirt is shipping to a lot of destinations worldwide.

Unfortunately, they don’t support shipping to the US, Australia,
Brasil and a few other countries on their European shop system.

Since the US taxation system is too complex for us to handle at the
moment, we have not created a corresponding US shop yet. We will look
into this later this year.


Help spread the word


Please help us spread this message by sharing it on your social
networks as widely as possible. Thank you !

Link to the blog post:

https://blog.europython.eu/post/621715858139594752/europython-2020-opening-our-merchandise-shop

Tweet:

https://twitter.com/europython/status/1275402520488222727

Thanks,
--
EuroPython 2020 Team
https://ep2020.europython.eu/
https://www.europython-society.org/

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: parsing encrypted netrc file

2020-06-23 Thread Seb
On Tue, 23 Jun 2020 02:08:19 +0100,
MRAB  wrote:

[...]

> Here's a page I found about ".netrc":

> https://ec.haxx.se/usingcurl/usingcurl-netrc

> and here's a page I found about ".authinfo.gpg":

> https://www.emacswiki.org/emacs/GnusAuthinfo

> Can you see the subtle difference?

Awww nuts, I do!  What a pain, wouldn't it be nice if there was a
standard on such things.

Thanks for the pointer!
-- 
Seb
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: [Python-ideas] asyncio: return from multiple coroutines

2020-06-23 Thread Pablo Alcain
Thank you very much Kyle for your answer, I am moving this conversation to
the more proper python-list for whoever wants to chime in. I summarize here
the key points of my original question (full question on the quoted email):

I have an application that listens on two websockets through the async
library https://websockets.readthedocs.io/ and I have to perform the same
function on the result, no matter where the message came from. I have
implemented a rather cumbersome solution with async Queues:
https://pastebin.com/BzaxRbtF, but i think there has to be a more
async-friendly option I am missing.

Now I move on to the comments that Kyle made

On Tue, Jun 23, 2020 at 12:32 AM Kyle Stanley  wrote:

> I believe asyncio.wait() with "return_when=FIRST_COMPLETED" would
> perform the functionality you're looking for with the
> "asyncio.on_first_return()". For details on the functionality of
> asyncio.wait(), see
> https://docs.python.org/3/library/asyncio-task.html#asyncio.wait.
>
> I understand that I can create two coroutines that call the same
> function, but it would be much cleaner (because of implementation issues)
> if I can simply create a coroutine that yields the result of whichever
> connection arrives first.
>
> You can use an asynchronous generator that will continuously yield the
> result of the first recv() that finishes (I'm assuming you mean
> "yields" literally and want multiple results from a generator, but I
> might be misinterpreting that part).
>

Yes, I want to have multiple results: the connections listening forever,
returning a result for each message received.


>
> Here's a brief example, using the recv() coroutine function from the
> pastebin linked:
>
> ```
> import asyncio
> import random
>
> async def recv(message: str, max_sleep: int):
> sleep_time = max_sleep * random.random()
> await asyncio.sleep(sleep_time)
> return f'{message} awaited for {sleep_time:.2f}s'
>
> async def _start():
> while True:
> msgs = [
> asyncio.create_task(recv("Messager 1", max_sleep=1)),
> asyncio.create_task(recv("Messager 2", max_sleep=1))
> ]
> done, _ = await asyncio.wait(msgs,
> return_when=asyncio.FIRST_COMPLETED)
> result = done.pop()
> yield await result
>
> async def main():
> async for result in _start():
> print(result)
>
> asyncio.run(main())
> ```


I forgot to mention thatI did try to use asyncio.wait with
`FIRST_COMPLETED`; however, the problem is that it seems to evict the
not-completed coroutines, so the messenger that arrives second does not
send the message. To check it, I have run that script without the random
sleep. just msgr1 waits 1s and msgr2 waits 2s, so msgr1 always ends first.
I expect a result like this (which I am currently getting with queues):

Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
Messenger 2 waits for 2.0s
Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
Messenger 2 waits for 2.0s
Messenger 1 waits for 1.0s
...

but instead I got this:

Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
Messenger 1 waits for 1.0s
...





> Note that in the above example, in "msgs", you can technically pass
> the coroutine objects directly to asyncio.wait(), as they will be
> implicitly converted to tasks. However, we decided to deprecate that
> functionality in Python 3.8 since it can be rather confusing. So
> creating and passing the tasks is a better practice.
>

Thanks for that info, I am still trying to grasp the best practices
surrounding mostly the explicitness in async.


> > Again, it's quite likely I am not seeing something obvious, but I didn't
> know where else to ask.
>
> If you're not mostly certain or relatively inexperienced with the
> specific area that the question pertains to, I'd recommend asking on
> python-list first (or another Python user community). python-ideas is
> primarily intended for new feature proposals/suggestions. Although if
> you've tried other resources and haven't found an answer, it's
> perfectly fine to ask a question as part of the suggestion post.
>
>
>
Original question, as posted in python-ideas:


> On Mon, Jun 22, 2020 at 6:24 PM Pablo Alcain 
> wrote:
> >
> > Hey everyone. I have been looking into asyncio lately, and even though I
> have had my fair share of work, I still have some of it very shaky, so
> first of all forgive me if what I am saying here is already implemented and
> I totally missed it (so far, it looks *really* likely).
> >
> > Basically this is the situation: I have an application that listens on
> two websockets through the async library
> https://websockets.readthedocs.io/ and I have to perform the same
> function on the result, no matter where the message came from. I understand
> that I can create two coroutines that call the same function, but it would
> be much cleaner (because of implementation issues) if I can simply create a
> coroutin

Re: Floating point problem

2020-06-23 Thread Tony Flury via Python-list



On 18/04/2020 15:29, Grant Edwards wrote:

On 2020-04-18, Souvik Dutta  wrote:

I literally tried it!!! And it did not stop because I did not get any 1.0
rather I got 0.999 But why does this happen. This is a simple math
which according to normal human logic should give perfect numbers which are
not endless. Then why does a computer behave so differently?

Because computers _don't_do_math_.  That is a very important thing to
remember.

Computer do something that _approximates_ math... in some
situations...  if you know what you're doing.

In you're case you're doing IEEE floating point operations. Before you
use floating point, you should read the article by Goldman that has been
suggested:

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
https://dl.acm.org/doi/10.1145/103162.103163


There is also

https://docs.python.org/3/tutorial/floatingpoint.html

In the official Python documentation, well worth reading.



--
Grant


--
https://mail.python.org/mailman/listinfo/python-list


Re: parsing encrypted netrc file

2020-06-23 Thread Barry Scott



> On 22 Jun 2020, at 23:38, Seb  wrote:
> 
> Hello,
> 
> What's the pythonic way to do this without polluting the user's
> directory with the decrypted file?  I wrongly thought this should do it:
> 
> import os.path as osp
> import gnupg
> import netrc
> import tempfile
> 
> gpg = gnupg.GPG()
> 
> with open(osp.expanduser("~/.authinfo.gpg"), "rb") as f:
>with tempfile.NamedTemporaryFile("w+") as tf:
>status = gpg.decrypt_file(f, output=tf.name)
>info = netrc.netrc(tf.name)
> 
> which fails as the temporary file doesn't even get created.

I do not how to do this. But I would decrypt into a string in memory.
Then have netrc parse from the string.

There is no point in having an encrypted file if you are going to decrypt in to
a temp file. A deleted files leaves it in the contents on the disk
to be grab by bad actors.

Barry



> 
> --
> Seb
> -- 
> https://mail.python.org/mailman/listinfo/python-list
> 

-- 
https://mail.python.org/mailman/listinfo/python-list


Asynchronous generators

2020-06-23 Thread Jonathan Gossage
-- 
I am attempting to learn how to use asyncio and I have been unable to find
any documentation or Internet posts that give information on the principles
underlying asyncio, let alone any examples showing how asynchronous
generators should be used. I have built a toy program to test trying to
read a text file, line by line, and process each line asynchronously. I
wind up with a message complaining that my asynchronous generator is not a
coroutine. I am posting a copy of my program here along with the results
from trying to run it. I am hoping for some suggestions about how to fix
it.  I am using Python 3.8.3 on Ubuntu 20.04

import asyncio
> from pathlib import Path
> import timeit
>
> async def _read_password() -> str:
> with Path('/etc/passwd').open() as f:
> line: str = f.readline()
> yield line
> print('read_password has read everything')
>
> async def main(_rp) -> int:
> line = ''
> async for line in _rp:
> try:
> print(f'Got line {line}')
> except StopAsyncIteration:
> line = None
> _rp.aclose()
> return 0
>
> if __name__ == '__main__':
> _loop = asyncio.get_event_loop()
> _rp = _read_password()
> _m = main(_rp)
> _loop.create_task(_m)
> _loop.create_task(_rp)
> timeit.Timer(_loop.run_until_complete()).timeit()
> _loop.close()


Here is the output:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
  File
"/home/jgossage/EclipseWorkspaces/GlobalVillage/Infrastructure/Play/Async/passwd.py",
line 34, in 
_loop.create_task(_rp)
  File "/usr/local/lib/python3.8/asyncio/base_events.py", line 431, in
create_task
task = tasks.Task(coro, loop=self, name=name)
TypeError: a coroutine was expected, got 
-- 
https://mail.python.org/mailman/listinfo/python-list


FW: Pycharm Won't Do Long Underscore

2020-06-23 Thread Tony Kaloki



Sent from Mail for Windows 10

From: Tony Kaloki
Sent: 23 June 2020 19:45
To: [email protected]
Subject: Pycharm Won't Do Long Underscore


Hi Guys,
   I’ve just begun to learn basic computer programming by 
downloading Python and Pycharm and following Youtube tutorials. But I’ve come 
across a problem that’s stopped me in my tracks.
 When I try to do a long underscore __  for classes in Pycharm, it only 
gives me two separate single underscores _ _. This is only in Pycharm, no 
problems anywhere else. Could you tell me how to fix this, because I can’t find 
any answers on the web and I’m not sure if I can go any further in my learning 
without being able to get long underscores.
Sorry if I’m just being really dense, but like I said I’m an absolute 
beginner. Thanks for your time,
Tony
Sent from Mail for Windows 10


-- 
https://mail.python.org/mailman/listinfo/python-list


Re: FW: Pycharm Won't Do Long Underscore

2020-06-23 Thread MRAB

On 2020-06-23 20:18, Tony Kaloki wrote:



Sent from Mail for Windows 10

From: Tony Kaloki
Sent: 23 June 2020 19:45
To: [email protected]
Subject: Pycharm Won't Do Long Underscore


Hi Guys,
I’ve just begun to learn basic computer programming by 
downloading Python and Pycharm and following Youtube tutorials. But I’ve come 
across a problem that’s stopped me in my tracks.
  When I try to do a long underscore __  for classes in Pycharm, it only 
gives me two separate single underscores _ _. This is only in Pycharm, no 
problems anywhere else. Could you tell me how to fix this, because I can’t find 
any answers on the web and I’m not sure if I can go any further in my learning 
without being able to get long underscores.
 Sorry if I’m just being really dense, but like I said I’m an absolute 
beginner. Thanks for your time,

The "__" is 2 underscores; it's just that they usually appear joined 
together in many fonts.


If you try:

 print('_' * 2)

do they appear joined together or separate? If they appear separate, 
then you can see that that's just how they're displayed in that funt.

--
https://mail.python.org/mailman/listinfo/python-list


Re: Pycharm Won't Do Long Underscore

2020-06-23 Thread Tony Kaloki
Alexander,
   Thank you so much! It worked! Thank you. One question: in 
your reply, are you saying that Python would have treated the two separate 
underscores the same way as a long  underscore i.e. it's a stylistic choice 
rather than a functional necessity?
   In any case, thanks again for your quick and easy to follow - even for me - 
reply.
Tony

Get Outlook for Android


From: Alexander Neilson 
Sent: Tuesday, June 23, 2020 9:28:37 PM
To: Tony Kaloki 
Cc: [email protected] 
Subject: Re: Pycharm Won't Do Long Underscore

Hi Tony

The “long underscore” (often called Dunder as “double underscore”) is actually 
two underscores as you are seeing shown in PyCharm.

However the display of it as one long underscore is a ligature (special font 
display to communicate clearer) and to enable these in PyCharm go to the 
settings dialog (depending on windows or Mac this could be in different 
locations) and select Editor > Font

In that screen select “enable font ligatures” and if your font supports it 
(like the default JetBrains Mono does) that will start to display the double 
underscores as a single long underscore.

Regards
Alexander

Alexander Neilson
Neilson Productions Limited
021 329 681
[email protected]

> On 24/06/2020, at 07:57, Tony Kaloki  wrote:
>
> 
>
> Sent from Mail for Windows 10
>
> From: Tony Kaloki
> Sent: 23 June 2020 19:45
> To: [email protected]
> Subject: Pycharm Won't Do Long Underscore
>
>
> Hi Guys,
>   I’ve just begun to learn basic computer programming by 
> downloading Python and Pycharm and following Youtube tutorials. But I’ve come 
> across a problem that’s stopped me in my tracks.
> When I try to do a long underscore __  for classes in Pycharm, it only 
> gives me two separate single underscores _ _. This is only in Pycharm, no 
> problems anywhere else. Could you tell me how to fix this, because I can’t 
> find any answers on the web and I’m not sure if I can go any further in my 
> learning without being able to get long underscores.
>Sorry if I’m just being really dense, but like I said I’m an absolute 
> beginner. Thanks for your time,
> Tony
> Sent from Mail for Windows 10
>
>
> --
> https://mail.python.org/mailman/listinfo/python-list
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Asynchronous generators

2020-06-23 Thread inhahe
I know of a URL that explains asyncio:
https://hackernoon.com/a-simple-introduction-to-pythons-asyncio-595d9c9ecf8c.
As to your specific problem, I can't help and don't know if the URL helps.
I haven't studied asyncio much.

On Tue, Jun 23, 2020 at 3:53 PM Jonathan Gossage  wrote:

> --
> I am attempting to learn how to use asyncio and I have been unable to find
> any documentation or Internet posts that give information on the principles
> underlying asyncio, let alone any examples showing how asynchronous
> generators should be used. I have built a toy program to test trying to
> read a text file, line by line, and process each line asynchronously. I
> wind up with a message complaining that my asynchronous generator is not a
> coroutine. I am posting a copy of my program here along with the results
> from trying to run it. I am hoping for some suggestions about how to fix
> it.  I am using Python 3.8.3 on Ubuntu 20.04
>
> import asyncio
> > from pathlib import Path
> > import timeit
> >
> > async def _read_password() -> str:
> > with Path('/etc/passwd').open() as f:
> > line: str = f.readline()
> > yield line
> > print('read_password has read everything')
> >
> > async def main(_rp) -> int:
> > line = ''
> > async for line in _rp:
> > try:
> > print(f'Got line {line}')
> > except StopAsyncIteration:
> > line = None
> > _rp.aclose()
> > return 0
> >
> > if __name__ == '__main__':
> > _loop = asyncio.get_event_loop()
> > _rp = _read_password()
> > _m = main(_rp)
> > _loop.create_task(_m)
> > _loop.create_task(_rp)
> > timeit.Timer(_loop.run_until_complete()).timeit()
> > _loop.close()
>
>
> Here is the output:
>
> Traceback (most recent call last):
>   File "/usr/local/lib/python3.8/runpy.py", line 194, in
> _run_module_as_main
> return _run_code(code, main_globals, None,
>   File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
> exec(code, run_globals)
>   File
>
> "/home/jgossage/EclipseWorkspaces/GlobalVillage/Infrastructure/Play/Async/passwd.py",
> line 34, in 
> _loop.create_task(_rp)
>   File "/usr/local/lib/python3.8/asyncio/base_events.py", line 431, in
> create_task
> task = tasks.Task(coro, loop=self, name=name)
> TypeError: a coroutine was expected, got  _read_password at 0x7f1f2454b8b0>
> --
> https://mail.python.org/mailman/listinfo/python-list
>
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Pycharm Won't Do Long Underscore

2020-06-23 Thread Grant Edwards
On 2020-06-23, Tony Kaloki  wrote:

>in your reply, are you saying that Python would have treated the
>two separate underscores the same way as a long underscore

No.

There is no long underscore in Python.

In Python, it's always two underscores.

In some fonts, two underscores just _looks_ like a single long
underscore.

--
Grant


-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Pycharm Won't Do Long Underscore

2020-06-23 Thread Alexander Neilson
Hi Tony

The “long underscore” (often called Dunder as “double underscore”) is actually 
two underscores as you are seeing shown in PyCharm. 

However the display of it as one long underscore is a ligature (special font 
display to communicate clearer) and to enable these in PyCharm go to the 
settings dialog (depending on windows or Mac this could be in different 
locations) and select Editor > Font

In that screen select “enable font ligatures” and if your font supports it 
(like the default JetBrains Mono does) that will start to display the double 
underscores as a single long underscore. 

Regards
Alexander

Alexander Neilson
Neilson Productions Limited
021 329 681
[email protected]

> On 24/06/2020, at 07:57, Tony Kaloki  wrote:
> 
> 
> 
> Sent from Mail for Windows 10
> 
> From: Tony Kaloki
> Sent: 23 June 2020 19:45
> To: [email protected]
> Subject: Pycharm Won't Do Long Underscore
> 
> 
> Hi Guys,
>   I’ve just begun to learn basic computer programming by 
> downloading Python and Pycharm and following Youtube tutorials. But I’ve come 
> across a problem that’s stopped me in my tracks.
> When I try to do a long underscore __  for classes in Pycharm, it only 
> gives me two separate single underscores _ _. This is only in Pycharm, no 
> problems anywhere else. Could you tell me how to fix this, because I can’t 
> find any answers on the web and I’m not sure if I can go any further in my 
> learning without being able to get long underscores.
>Sorry if I’m just being really dense, but like I said I’m an absolute 
> beginner. Thanks for your time,
> Tony
> Sent from Mail for Windows 10
> 
> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Pycharm Won't Do Long Underscore

2020-06-23 Thread Alexander Neilson
Hi Tony

Absolutely. The “long underscore” is just a display thing. Underneath it is 
always two underscores. The only difference is what your editor is showing (or 
how the underscore is drawn in the display font - as some fonts make the 
underscore the full width or slightly over the edge of where the character will 
be displayed so that many underscores look all joined up like a line)

These links may provide you with some useful reading around this and what 
underscores signal in Python. 

https://dbader.org/blog/meaning-of-underscores-in-python

https://dbader.org/blog/python-dunder-methods

Happy to have helped and good luck with your Python journey. 

Regards
Alexander

Alexander Neilson
Neilson Productions Limited
021 329 681
[email protected]

> On 24/06/2020, at 08:49, Tony Kaloki  wrote:
> 
> 
> Alexander,
>Thank you so much! It worked! Thank you. One question: in 
> your reply, are you saying that Python would have treated the two separate 
> underscores the same way as a long  underscore i.e. it's a stylistic choice 
> rather than a functional necessity?
>In any case, thanks again for your quick and easy to follow - even for me 
> - reply.
> Tony
> 
> Get Outlook for Android
> 
> From: Alexander Neilson 
> Sent: Tuesday, June 23, 2020 9:28:37 PM
> To: Tony Kaloki 
> Cc: [email protected] 
> Subject: Re: Pycharm Won't Do Long Underscore
>  
> Hi Tony
> 
> The “long underscore” (often called Dunder as “double underscore”) is 
> actually two underscores as you are seeing shown in PyCharm. 
> 
> However the display of it as one long underscore is a ligature (special font 
> display to communicate clearer) and to enable these in PyCharm go to the 
> settings dialog (depending on windows or Mac this could be in different 
> locations) and select Editor > Font
> 
> In that screen select “enable font ligatures” and if your font supports it 
> (like the default JetBrains Mono does) that will start to display the double 
> underscores as a single long underscore. 
> 
> Regards
> Alexander
> 
> Alexander Neilson
> Neilson Productions Limited
> 021 329 681
> [email protected]
> 
> > On 24/06/2020, at 07:57, Tony Kaloki  wrote:
> > 
> > 
> > 
> > Sent from Mail for Windows 
> > 10
> > 
> > From: Tony Kaloki
> > Sent: 23 June 2020 19:45
> > To: [email protected]
> > Subject: Pycharm Won't Do Long Underscore
> > 
> > 
> > Hi Guys,
> >   I’ve just begun to learn basic computer programming by 
> > downloading Python and Pycharm and following Youtube tutorials. But I’ve 
> > come across a problem that’s stopped me in my tracks.
> > When I try to do a long underscore __  for classes in Pycharm, it only 
> > gives me two separate single underscores _ _. This is only in Pycharm, no 
> > problems anywhere else. Could you tell me how to fix this, because I can’t 
> > find any answers on the web and I’m not sure if I can go any further in my 
> > learning without being able to get long underscores.
> >Sorry if I’m just being really dense, but like I said I’m an absolute 
> > beginner. Thanks for your time,
> > Tony
> > Sent from Mail for Windows 
> > 10
> > 
> > 
> > -- 
> > https://mail.python.org/mailman/listinfo/python-list
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: FW: Pycharm Won't Do Long Underscore

2020-06-23 Thread Terry Reedy

On 6/23/2020 4:44 PM, MRAB wrote:

On 2020-06-23 20:18, Tony Kaloki wrote:


  When I try to do a long underscore __  for classes in Pycharm, 
it only gives me two separate single underscores _ _.


The "__" is 2 underscores; it's just that they usually appear joined 
together in many fonts.


To really see this, start IDLE either from an icon or 'python -m 
idlelib' (use 'python3' on *nix) on a command line.  Open the settings 
dialog with Options => Configure IDLE.  On the Font tab there is a Font 
Sample box.  Go to the bottom and enter several _s.  In the Windows 
Courier font, and several others, this looks like one line.  On the 
left, try other fonts.  On Windows, switching to Source Code Pro (and 
some others) results in separate underscores.  Source Code Pro, as the 
name suggests, is aimed at programmers, and we need to be able to count 
underscores.


Or maybe you can switch fonts in your mail reader and see what happens 
to the underscores above.



--
Terry Jan Reedy


--
https://mail.python.org/mailman/listinfo/python-list


Re: Pycharm Won't Do Long Underscore

2020-06-23 Thread Christian Gollwitzer

Am 23.06.20 um 22:49 schrieb Tony Kaloki:

Alexander,
Thank you so much! It worked! Thank you. One question: in 
your reply, are you saying that Python would have treated the two separate 
underscores the same way as a long  underscore i.e. it's a stylistic choice 
rather than a functional necessity?


Python only ever sees two separate underscores. There is no long 
underscore, its only the way it is printed to your screen that differs. 
The difference is the same as if you would choose Arial, Times, or 
Courier to print your source code. The characters look slightly 
different to your eye, but they are exactly the same for Python. The .py 
file doesn't have a difference, regardless how you set the font.


As others have said, the underscore of some fonts is so long that they 
overlap, if you put more than on in a row.


Christian
--
https://mail.python.org/mailman/listinfo/python-list