<p>通常,您必须将<code>try</code>块最小化到特定的行,以使其看起来像这样:</p>
<pre class="lang-py prettyprint-override"><code>def is_valid_entries(principle, int_rate, years):
#Convert the inputs from string to respective data type
try:
principal_float = float(principle)
except ValueError:
return False, "Could not convert principal to the appropriate data type"
try:
rate_float = float(int_rate)
except ValueError:
return False, "Could not convert rate to the appropriate data type"
try:
years_int = int(years)
except ValueError:
return False, "Could not convert years to the appropriate data type"
if not (0 < rate_float < 1.0):
return False, "The interest rate must be between 0.00 to 1.00"
return True, (principal_float, rate_float, years_int)
</code></pre>
<p>当然,正如你所看到的,这很可怕。改进的提示是<code>repeating code == functions</code>,因此最好将其包装到函数中:</p>
<pre class="lang-py prettyprint-override"><code>def number_conversion(string, type, name):
try:
return type(string)
except ValueError:
raise ValueError(f"Could not convert {name} to {type().__class__.__name__}")
</code></pre>
<p>现在,您的主代码可以如下所示:</p>
<pre class="lang-py prettyprint-override"><code>def is_valid_entries(principle, int_rate, years):
#Convert the inputs from string to respective data type
try:
principal_float = number_conversion(principle, float, "principle")
rate_float = number_conversion(int_rate, float, "rate")
years_int = number_conversion(years, int, "years")
except ValueError as ve:
return False, ve.message
if not (0 < rate_float < 1.0):
return False, "The interest rate must be between 0.00 to 1.00"
return True, (principal_float, rate_float, years_int)
</code></pre>
<p>这样,您可以根据每个输入获得特定的消息</p>
<P><SUP>*删除空白^ {< CD3>},因为在代码</SUP> </P>中没有其他异常出现。