@@ -254,40 +254,41 @@ impl CFormatSpec {
254254 _ => 6 ,
255255 } ;
256256 let magnitude = num. abs ( ) ;
257- format ! ( "{:.*}" , precision, magnitude)
257+ Ok ( format ! ( "{:.*}" , precision, magnitude) )
258258 }
259259 CFormatType :: Float ( CFloatType :: Exponent ( _) ) => {
260- return Err ( "Not yet implemented for %e and %E" . to_owned ( ) )
260+ Err ( "Not yet implemented for %e and %E" . to_owned ( ) )
261261 }
262262 CFormatType :: Float ( CFloatType :: General ( _) ) => {
263- return Err ( "Not yet implemented for %g and %G" . to_owned ( ) )
263+ Err ( "Not yet implemented for %g and %G" . to_owned ( ) )
264264 }
265265 _ => unreachable ! ( ) ,
266- } ;
266+ } ? ;
267267
268- if self . flags . contains ( CConversionFlags :: ZERO_PAD ) {
268+ let formatted = if self . flags . contains ( CConversionFlags :: ZERO_PAD ) {
269269 let fill_char = if !self . flags . contains ( CConversionFlags :: LEFT_ADJUST ) {
270270 '0'
271271 } else {
272272 ' '
273273 } ;
274- Ok ( format ! (
274+ format ! (
275275 "{}{}" ,
276276 sign_string,
277277 self . fill_string(
278278 magnitude_string,
279279 fill_char,
280280 Some ( sign_string. chars( ) . count( ) )
281281 )
282- ) )
282+ )
283283 } else {
284- Ok ( self . fill_string ( format ! ( "{}{}" , sign_string, magnitude_string) , ' ' , None ) )
285- }
284+ self . fill_string ( format ! ( "{}{}" , sign_string, magnitude_string) , ' ' , None )
285+ } ;
286+ Ok ( formatted)
286287 }
287288
288289 fn format ( & self , vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < String > {
289290 // do the formatting by type
290- match & self . format_type {
291+ let formatted = match & self . format_type {
291292 CFormatType :: String ( preconversor) => {
292293 let result = match preconversor {
293294 CFormatPreconversor :: Str => vm. to_str ( & obj) ?,
@@ -296,7 +297,7 @@ impl CFormatSpec {
296297 TryFromObject :: try_from_object ( vm, vm. call_method ( & obj, "decode" , vec ! [ ] ) ?) ?
297298 }
298299 } ;
299- Ok ( self . format_string ( result. borrow_value ( ) . to_owned ( ) ) )
300+ self . format_string ( result. borrow_value ( ) . to_owned ( ) )
300301 }
301302 CFormatType :: Number ( number_type) => {
302303 if !objtype:: isinstance ( & obj, & vm. ctx . types . int_type ) {
@@ -311,20 +312,19 @@ impl CFormatSpec {
311312 obj. lease_class( )
312313 ) ) ) ;
313314 }
314- Ok ( self . format_number ( objint:: get_value ( & obj) ) )
315+ self . format_number ( objint:: get_value ( & obj) )
315316 }
316- CFormatType :: Float ( _) => if let Some ( value) = objfloat:: try_float ( & obj, vm) ? {
317+ CFormatType :: Float ( _) => {
318+ let value = objfloat:: try_float ( & obj, vm) ?. ok_or_else ( || {
319+ vm. new_type_error ( format ! (
320+ "%{} format: an floating point or integer is required, not {}" ,
321+ self . format_char,
322+ obj. lease_class( ) . name
323+ ) )
324+ } ) ?;
317325 self . format_float ( value)
318- } else {
319- let required_type_string = "an floating point or integer" ;
320- return Err ( vm. new_type_error ( format ! (
321- "%{} format: {} is required, not {}" ,
322- self . format_char,
323- required_type_string,
324- obj. lease_class( )
325- ) ) ) ;
326+ . map_err ( |e| vm. new_not_implemented_error ( e) ) ?
326327 }
327- . map_err ( |e| vm. new_not_implemented_error ( e) ) ,
328328 CFormatType :: Character => {
329329 let ch = {
330330 if objtype:: isinstance ( & obj, & vm. ctx . types . int_type ) {
@@ -348,9 +348,10 @@ impl CFormatSpec {
348348 Err ( vm. new_type_error ( "%c requires int or char" . to_owned ( ) ) )
349349 }
350350 } ?;
351- Ok ( self . format_char ( ch) )
351+ self . format_char ( ch)
352352 }
353- }
353+ } ;
354+ Ok ( formatted)
354355 }
355356}
356357
@@ -601,11 +602,11 @@ fn parse_literal(text: &str) -> Result<(CFormatPart, &str, usize), ParsingError>
601602 cur_text = remaining;
602603 }
603604 Err ( err) => {
604- if !result_string. is_empty ( ) {
605- return Ok ( ( CFormatPart :: Literal ( result_string) , cur_text, consumed) ) ;
605+ return if !result_string. is_empty ( ) {
606+ Ok ( ( CFormatPart :: Literal ( result_string) , cur_text, consumed) )
606607 } else {
607- return Err ( ( err, consumed) ) ;
608- }
608+ Err ( ( err, consumed) )
609+ } ;
609610 }
610611 }
611612 }
@@ -621,23 +622,19 @@ fn parse_text_inside_parentheses(text: &str) -> Option<(String, &str)> {
621622 let mut chars = text. chars ( ) ;
622623 let mut contained_text = String :: new ( ) ;
623624 while counter > 0 {
624- let c = chars. next ( ) ;
625-
625+ let c = chars. next ( ) ?;
626626 match c {
627- Some ( '(' ) => {
627+ '(' => {
628628 counter += 1 ;
629629 }
630- Some ( ')' ) => {
630+ ')' => {
631631 counter -= 1 ;
632632 }
633- None => {
634- return None ;
635- }
636633 _ => ( ) ,
637634 }
638635
639636 if counter > 0 {
640- contained_text. push ( c. unwrap ( ) ) ;
637+ contained_text. push ( c) ;
641638 }
642639 }
643640
0 commit comments