虽然循环“继续”在 try, except, finally 内不起作用

问题描述

尝试运行 case (PlayerState.CarryingRaw): //Debug.Log("Carrying" + pickedUpRawItems.Count + "items"); //Debug.Log(pos.x +","+ pos.y); hits = Physics2D.RaycastAll(transform.position,new Vector2(pos.x-5,pos.y),20,8); Debug.DrawLine(transform.position,new Vector2(pos.x - 5,Color.red,2); for (int i = 0; i < hits.Length; i++) { Debug.Log(hits[i].transform.name); } //Debug.Log("Raycasted" + hits.Length + "Objects"); for (int i = 0; i < hits.Length; i++) { { if (hits[i].transform.tag == pickedUpRawItems[pickedUpRawItems.Count - 1].transform.tag) { Debug.Log(hits[i].transform.tag); Debug.Log(pickedUpRawItems[pickedUpRawItems.Count - 1].transform.tag); hits[i].transform.GetComponent<BoxCollider2D>().enabled = false; hits[i].transform.GetComponent<ItemScript>().currentState = ItemScript.ObjectState.PickedUp; hits[i].transform.localScale = sizeChange; pickedUpRawItems.Add(hit.transform.gameObject); } } } break; case (PlayerState.Working): break; case (PlayerState.Free): Debug.Log("youhou + State.Free"); hit = Physics2D.Raycast(transform.position,pos.y)); if (hit) { hit.transform.GetComponent<BoxCollider2D>().enabled = false; Debug.Log("youhou + hit.Free"); hit.transform.GetComponent<ItemScript>().currentState = ItemScript.ObjectState.PickedUp; hit.transform.localScale = sizeChange; pickedUpRawItems.Add(hit.transform.gameObject); currentState = PlayerState.CarryingRaw; } break; 循环直到输入有效:

while

如果输入除数字以外的任何内容,则需要继续循环,但循环到达 while True: try: print('open') num = int(input("Enter number:")) print(num) except ValueError: print('Error:"Please enter number only"') continue #this continue is not working,the loop runs and break at finally finally: print('close') break finally

解决方法

finally总是在 try-except 之后运行。您需要 else,它仅在 try 块不引发异常时运行

顺便说一下,尽量减少 try 块中的代码,以避免误报。

while True:
    inp = input("Enter number: ")
    try:
        num = int(inp)
    except ValueError:
        print('Error: Please enter number only')
        continue
    else:
        print(num)
        break
    print('This will never print')  # Added just for demo

试运行:

Enter number: f
Error: Please enter number only
Enter number: 15
15

请注意,您的示例中实际上并不需要 continue,因此我在循环底部添加了一个演示 print()

,

您只需删除 import { Component } from '@angular/core'; @Component({ selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'angular-example'; } 语句即可实现您想要的效果。

finally:

验证 int() 后需要做的任何事情都应该在 while True: try: print('open') num = int(input("Enter number:")) print(num) break # stop the loop when int() returns a value except ValueError: print('Error:"Please enter number only"') continue 结构之外