2017-09-12 32 views
3

私はPythonプログラミングの初心者です。私のコードを見て解読する可能性は非常に高いです。マイナステストの改善のためにコードを改善する方法を知りたいですか?このPythonコードを改善してネガティブテストを改善するにはどうすればよいですか?

ageinmonths = input("Enter your age in months: ") 

age = int(ageinmonths,10) 
if type(age) == float: 
    print("Invalid age format entered") 

if type(age) == str: 
    print("Invalid age format entered") 


years = int(age/12) 
months = age%12 

print("Your exact age in years and months is",years,"years",months,"months") 

上記のコード行の問題は、適切な値ex:56、48などを数ヶ月入力すると問題なく動作します。

しかし、私は、無効な値を入力してしまった場合、私は、以下に示すエラーメッセージが表示されます。

Enter your age in months: Welcome 
Traceback (most recent call last): 
    File "C:\Users\Srinivas\Documents\python\guess_age.py", line 2, in <module> 
    age = int(ageinmonths,10) 
ValueError: invalid literal for int() with base 10: 'Welcome' 
>>> 

私は無効に負のテストのための適切なエラーメッセージを追加するために自分のコードを改善する方法を知りたいですこのような文字列、特殊文字などの検索基準は、私は、Python 3.6(32ビット版)を使用していますなど

浮かびます。

+2

あなたは、例外処理を使用します。 '' Welcome "'から整数を作成しようとする試みは失敗します。あなたは 'try ... except'ブロックでそれを囲みたいと思っています。詳細はこちら:https://docs.python.org/3/tutorial/errors.html –

+0

@ReutSharabaniありがとうございました! – user3002318

答えて

2

Reut Sharabaniは、try ... exceptブロックを使用できます。私はすべての例外とValueError例外をキャッチし、いないよ

try: 
    int("whatever") 
except ValueError: 
    print("Upss there was a problem") 

注: あなたのような何かを行うことができます。 Reut Sharabaniが言っ

1

として、これを行う方法は、try/exceptブロックです。たとえば:そのほかに

ageinmonths = input("Enter your age in months: ") 
try: 
    age = int(ageinmonths,10) 
    years = int(age/12) 
    months = age%12 
    print("Your exact age in years and months is",years,"years",months,"months") 
except: 
    print("Invalid age format entered") 

、あなたは、エラー処理のいくつかの基本的な概念が欠落している:

  1. 小切手前に使用してデータを実行します。なぜあなたはint(ageinmonths)をとっていますか?次にのデータが有効かどうかをチェックしていますか?

  2. チェックではなく、あなたがしたくないものを持っていないかどうかをチェックするよりも、あなたが望むものを持っているかどうかを確認します。 float、ints、およびstr以外の多くのデータ型があります。 ageinmonthsがリストの場合はどうなりますか? ageinmonths int型であり、それがintにをを強要することができるかどうかかどうか:

  3. は、次の2つの問題が混乱しています。誰かが "12"とタイプすると、strです。 int(ageinmonths)は動作します。なぜなら、 "12"はint型に変換できますが、type(ageinmonths)== strはTrueを返すからです。そして、「タイプ(年齢)== strの」ageinmonthsがintに強制することができれば、その後、年齢はSTRをされませんので、は、あなたの元のコードでTrueに評価されることはありません、とageinmonthsはに強制変換できない場合intであれば、あなたのコードは "type(age)== str"になる前に失敗します。

  4. また、2つのif文のコードブロックが同じ場合は、それらを1つにまとめることができます。

関連する問題