在我正在创建的python程序中,我希望它只采用整数,如果它得到一个字符串,则说“系统中存在错误”。用户不会理解,而不是扼杀无知的信息
答案 0 :(得分:9)
使用try-except
块捕获错误并使用raise
语句说出您选择的错误消息:
try:
a = int(input())
except:
raise Exception('There has been an error in the system')
答案 1 :(得分:3)
您需要使用try
except
块来捕获错误 - 请参阅documentation。然后您可以print
发送一条消息,并在必要时退出该程序:
try:
value = int(input("Enter an integer: "))
except ValueError:
print("There has been an error in the system.")
input() # To let the user see the error message
# if you want to then exit the program
import sys
sys.exit(1)
答案 2 :(得分:2)
try
,except
和raise
由于ValueError
继承自Exception
类,因此在创建ValueError
对象时,第一个参数是打印的消息:
try:
int("string") #the code that raises the error
except ValueError:
raise ValueError("Your custom message here.")
此打印:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError: invalid literal for int() with base 10: 'string'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: Your custom message here.
如果您不想打印以前的错误链,请在from None
语句中放入raise
:
try:
int("string") #the code that raises the error
except ValueError:
raise ValueError("Your custom message here.") from None
此打印:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: Your custom message here.
我建议您离开此链,因为它会提供更多信息,例如输入的错误信息。如果要在自定义消息中包括原始错误的信息,请使用错误的属性:
from traceback import format_tb
try:
int("string") #the code that raises the error
except ValueError as err:
raise ValueError("Custom message with traceback and original message\n" + format_tb(err.__traceback__)[0] + err.args[0] + "\nEnd of error message.") from None
此打印
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: Custom message with traceback and message
File "<stdin>", line 2, in <module>
invalid literal for int() with base 10: 'string'
End of error message.
尽管这允许自定义错误的打印内容,但是代码有点不合常规。
assert
因为您说过要阻止所有所有字符串的问题,所以可以使用assert
和isinstance()
:
obj = "a string" #the input you want to raise the error on
assert not isinstance(obj, str), "Your custom message here."
此打印:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Your custom message here.
尽管使用assert
看起来很干净,但该错误不会携带太多信息,因为它是通用的AssertionError
。抬起ValueError
可以一目了然地了解导致错误的原因的更多信息。
答案 3 :(得分:0)
如果您不想使用$functions = array(
'function1' => function($echo) {
echo $echo;
}
);
$functions['function1']("hello world");
// Works
//----------
class A {
public static $functions = [];
}
A::$functions['function1'] = function($echo) {
echo $echo;
};
A::$functions['function1']("hello world");
块添加其他缩进级别,则可以通过在代码的开头添加以下内容来更改所有错误的处理:
try-except
如果出现错误,则仅打印出您指定的错误消息。此外,此可防止显示堆栈跟踪。
答案 4 :(得分:0)
如果要出错,请使用raise。这是一个示例:
raise SyntaxError('MUHAHA THIS IS A ERROR')
这是最简单的方法,我不知道try
和except
的作用
答案 5 :(得分:0)
在大多数情况下,使用raise Exception('There has been an error in the system')
可能很有用,但您可能还需要为特定系统创建有意义的错误。
例如
class ExpiredTaxIdException(Exception):
def __init__(self):
Exception.__init__(self, 'Tax ID expired')
然后您可以在代码上调用它,例如:
from your_execeptions_file import ExpiredTaxIdException
class ClientsController:
def is_profile_valid(client):
if client.tax_id.is_valid == False:
raise ExpiredTaxIdException()
return True
# eg. you call it on your API on another place of your code that can't accept invalid tax_id
try:
ClientsController().verify_client(client)
except ExpiredTaxIdException as e:
return {'error': str(e)}
>>> { "error": "Tax ID expired" }
答案 6 :(得分:-5)
导入 ctypes ctypes.windll.user32.MessageBoxW(无,你是“CUSTOM MESSAGE”,你是“TITLE BAR”,0)