2017-10-23 11 views
0

私はIDLEを通してPython 3.3を使用しています。KeyErrorのエラーメッセージの新しい行 - Python 3.3

raise KeyError('This is a \n Line break') 

それは出力:

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    raise KeyError('This is a \n Line break') 
KeyError: 'This is a \n Line break' 

私は出力にこのような改行とのメッセージ、それをしたいと思います。私が試してみました

This is a 
Line Break 

をのようなコードを実行中それを文字列に変換する前に、またはos.linesepを使用していますが、何も動作していないようです。 IDLEにメッセージが正しく表示されるようにする方法はありますか?


私は(代わりにKeyErrorの)Exceptionを上げた場合、出力は私が欲しいものですが、私は可能であればまだKeyErrorを上げたいと思います。

+1

あなたの期待どおりの結果は?あなたのメッセージに新しい行があるとすれば、改行文字 '\ n'のためにそれをエスケープするために、スラッシュ文字を使用する必要があります。 「これは\\ n改行です」 – yash

+0

私は "上"と書いています。つまり、メッセージは "これは\ n改行です"と表示され、新しい行では "下"には表示されません。 –

+1

私はあなたが何を意味するかを知っていますが、質問が正しく解釈されなかった理由を知ることができます。私はそれをより明確にするために編集しました。ニース質問btw – tburrows13

答えて

1

あなたの問題は何も持っていないために私が見つけた回避策ですIDLEとの関係表示される動作はすべてPythonのものです。現在のリポジトリCPythonを対話的に実行すると、コマンドラインから報告された動作が表示されます。 KeyError例外もはIndexErrorとは異なる働きなぜ

Python 3.7.0a2+ (heads/pr_3947:01eae2f721, Oct 22 2017, 14:06:43) 
[MSC v.1900 32 bit (Intel)] on win32 

>>> raise KeyError('This is a \n Line break') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'This is a \n Line break' 
>>> s = 'This is a \n Line break' 

>>> s 
'This is a \n Line break' 
>>> print(s) 
This is a 
Line break 
>>> raise Exception('This is a \n Line break') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
Exception: This is a 
Line break 
>>> raise IndexError(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: This is a 
Line break 
>>> try: 
... raise KeyError('This is a \n Line break') 
... except KeyError as e: 
... print(e) 

'This is a \n Line break' 
>>> try: 
... raise KeyError('This is a \n Line break') 
... except KeyError as e: 
... print(e.args[0]) 

This is a 
Line break 

は、私は知らないが、印刷e.argsは、[0]すべての例外のために働く必要があります。

EDIT:違いの理由はthis old tracker issueです。これはKeyErrorコードのコメントを引用しています。「argsが1つの項目のタプルである場合、args [0]にreprを適用してください。私はあなたの問題をこの違いのもう一つの現れと言います。

0

その場合、あなたはPythonでraw stringを使用する必要が

>>> raise Exception(r'This is a \n Line break') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
Exception: This is a \n Line break 

KeyErrorの編集:

後はKeyError

try: 
    raise KeyError 
except KeyError as e: 
    print(r'This is a \n Line break') 
    #prints This is a \n Line break 
+0

これは明らかに**私が望むものではありません**です。 –

+0

私の答えを編集しました、それはあなたが欲しいものですか? – yash

+0

あなたの答えのおかげでありがとうが、私は正反対のものがほしいと思う。ちょうどそれがExceptionで動作することを認識しましたが、KeyErrorではありません –